From d6e85c9affebef338846d5fb13e40eb8ab657811 Mon Sep 17 00:00:00 2001 From: "enrico.eth" <85900164+enricobottazzi@users.noreply.github.com> Date: Tue, 23 Jan 2024 12:22:35 +0100 Subject: [PATCH] fix: replace `swap_balances_per_level` with `sum_balances_per_level` (#255) * fix: replace `swap_balances_per_level` with `sum_balances_per_level` * chore: update readme * chore: update verifier contract and set `N_BYTES` from 14 to 8 * test: fix * chore: fix comment --- backend/README.md | 2 +- backend/examples/summa_solvency_flow.rs | 2 +- .../src/contracts/abi/InclusionVerifier.json | 2 +- .../contracts/generated/inclusion_verifier.rs | 3466 ++++++++--------- backend/src/tests.rs | 9 +- contracts/scripts/deploy.ts | 2 +- contracts/src/InclusionVerifier.sol | 54 +- contracts/test/Summa.ts | 2 +- zk_prover/Cargo.lock | 1964 ++++++---- zk_prover/README.md | 24 +- zk_prover/benches/full_solvency_flow.rs | 2 +- zk_prover/examples/gen_commitment.rs | 2 +- zk_prover/examples/gen_inclusion_proof.rs | 2 +- zk_prover/examples/gen_inclusion_verifier.rs | 2 +- .../inclusion_proof_solidity_calldata.json | 2 +- zk_prover/prints/mst-inclusion-layout.png | Bin 1846594 -> 1836983 bytes zk_prover/src/chips/merkle_sum_tree.rs | 69 +- zk_prover/src/circuits/merkle_sum_tree.rs | 7 +- zk_prover/src/circuits/tests.rs | 80 +- 19 files changed, 3020 insertions(+), 2673 deletions(-) diff --git a/backend/README.md b/backend/README.md index 19b6aaa..8a0e79c 100644 --- a/backend/README.md +++ b/backend/README.md @@ -50,7 +50,7 @@ cargo test --release -- --nocapture ### Generating and updating verifier contract for Backend -The verifier contract in the backend were generated using a predefined set of parameters: `N_CURRENCIES = 2` and `N_BYTES=14`, as indicated [here](https://github.com/summa-dev/summa-solvency/blob/master/zk_prover/examples/gen_inclusion_verifier.rs#L21-L22). +The verifier contract in the backend were generated using a predefined set of parameters: `N_CURRENCIES = 2` and `N_BYTES=8`, as indicated [here](https://github.com/summa-dev/summa-solvency/blob/master/zk_prover/examples/gen_inclusion_verifier.rs#L21-L22). If you intend to work with different parameters, you'll need to adjust these hard-coded values and then generate new verifier contract. The process described below assists in both generating the verifier and updating the Summa contract, which integrates the new verifier as constructors. diff --git a/backend/examples/summa_solvency_flow.rs b/backend/examples/summa_solvency_flow.rs index 6093f41..bff04b8 100644 --- a/backend/examples/summa_solvency_flow.rs +++ b/backend/examples/summa_solvency_flow.rs @@ -63,7 +63,7 @@ async fn main() -> Result<(), Box> { // Using the `round` instance, the commitment is dispatched to the Summa contract with the `dispatch_commitment` method. let timestamp = 1u64; - let mut round = Round::<4, 2, 14>::new(&signer, Box::new(mst), params_path, timestamp).unwrap(); + let mut round = Round::<4, 2, 8>::new(&signer, Box::new(mst), params_path, timestamp).unwrap(); // Sends the commitment, which should ideally complete without errors. round.dispatch_commitment().await?; diff --git a/backend/src/contracts/abi/InclusionVerifier.json b/backend/src/contracts/abi/InclusionVerifier.json index 13edd23..9e0b150 100644 --- a/backend/src/contracts/abi/InclusionVerifier.json +++ b/backend/src/contracts/abi/InclusionVerifier.json @@ -1 +1 @@ -{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/InclusionVerifier.sol","abi":[{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"instances","type":"uint256[]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x6080806040523461001657614b95908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c631e8e1e131461002857600080fd5b346100a05760403660031901126100a05767ffffffffffffffff6004358181116100a357366023820112156100a35780600401358281116100ab57369101602401116100a7576024358181116100a357366023820112156100a35780600401359182116100a357602490369260051b010111156104b5575b80fd5b8280fd5b5080fd5b8380fd5b9290604080918035956020820135907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780600381808c80098c0908818480091491818410918a10161616968652602086015201920190565b602091600020600080516020614ac0833981519152810682526000520190602090565b602090600182536021600020600080516020614ac0833981519152810682526000520190565b91909182610f2091825190610f40925b601f19810184106102145750600080516020614ac0833981519152809284519009602087526020808801526020604088015260608701527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808701528160a087015260208660c08160055afa1694805192601f19809201905b80610f40106101fa5750505080610f4051830991835190099152610f4052565b8280918580855189099782519009968152019101906101da565b959291600080516020614ac08339815191529083519009918284526020809101930195610160565b90610180916000516020915b61016083106102f957600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106102df5750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906102bf565b9391906020600080516020614ac08339815191528192845190099283855201920193610248565b9060a0916000516020915b608083106103db57600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106103c15750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906103a1565b9391906020600080516020614ac0833981519152819284519009928385520192019361032b565b91906040526060526040600060808160065afa1690565b906040526040600060608160075afa1690565b919060c05260e05260406080808060065afa1690565b9060c0526040608060608160075afa1690565b9392919060005260205261086051604052610880516060526108a0516080526108c05160a05260c05260e0526108e05161010052610900516101205261092051610140526109405161016052602060006101808160085afa166000511690565b60017f101e32209fbc2afdda2eab08eed3e3e9323ecd92e5c6b9508204b948de1ae5f36106c052600b6106e0527f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610700527f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610720527f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610740527f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d3026107605260046107805260006107a05260006107c05260006107e052600061080052600161082052600261084052610860907f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c282527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed610880527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6108a0527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6108c0527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6108e0527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e610900527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145610920527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff610940527f17e7cb6a30c4ce9a3d8de604dbaf517b1f23e440acb9e7345938ff5b245a403e610960527f1c31a42d7da360cce8262e21fb9a5ef26a23ebbcf6995ccab89aee400c2e994b610980527f05591c7faa2c9eaf1c9573a84bddec303219abf496af0899ed438853227dd0566109a0527f2cfa24fde576750b4036dffe40105e6b7244f63843ec74d9d0aad48ba413287c6109c0527f299b12e65399dcea3f1e0ce046cf5f93ce7ba9f779bfa39e7f0c6d4c19628a906109e0527f21c577122a3d1f4d019b93e724d981b0653ed94f492eafec50945231935f9a95610a00527f19d9220141bef25921d474c6e634d06dfb7d7904e59a4ec486a148b00bfd38a3610a20527f2f38511e53688056b693c84ef69a7ae2b9ab482906dc46ae9d9522fd3ce098b6610a40527f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa4610a60527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c0610a80527f19206bebc5cc4a5b692c58bc61e7aec6d3fbb8344e39a133699f74e6f40ec2a8610aa0527f0678c7bdd141bd26cbe9336f5dcf1c5a8cf21a5927afd1b2f393152ee02a6a78610ac0527f1c6e2343333783b4f48ae7d2681afb3cdf6a4dfbc83a500cb06db3265ad3e5d5610ae0527f1a3d836d4325ff30144c1e2038a4d4025fd0f01af24cfd8dfd54018e64f3b098610b00527f203b21a648fbfb96459640bbc5b41852dd1efc1209c89b635ba638dcb929da6b610b20527f04e7002f06f2091a44afcd311e93c22f46dd9f3207b5bcc34f0ca7652098f097610b40527f20ab7490b42f3f7b2b0bbe601a09d72ee93f924801d597f48cf2d443751d5f91610b60527f2bca2f1762946a05fb1632550c6cb12c02d18d9bee5bdd4212ca7342888720fd610b80527f09e3303245e3b00aca894e9fba3d5184ff3739c664e363f205d42feee327b6aa610ba0527f13ce92283cc6f648bdda86182d91852aab5c6088ab008d9cdb5522fcbf5c6289610bc0527f08a503e7a16684a81991dbfc5ec84c9f4b0f7a506ddf26b67d305ebfc0f81743610be0527f08a2d8e1760ffb16f70147f8b44e781ced65a1e677a786cdd8bc9f947b36131c610c00527f25632bc8012c6cbc6ddda661a9729f544c54620700c3840c01ca5b57e61a1ffe610c20527f2ba5764c663a4b2892343c303da0f5664e3f620dd6b851a711781704292fd11a610c40527f07cfe4f3152b1996e8eafd718451356c2044e4c239fcc29eb3a81d392e1b44ad610c60527f255673e224a594e53fd5b1b4dcd46329e72a04e16056dea3d5a17e31291a9960610c80527f136cb14b351f3b43b5e618c5c49022588edd48550f4e7d69309442e8b83d0d22610ca0527f0ee9bbdfce93815e79aabfc5ec92a52346c46a45e17bc5bc9ad8155e982c9cac610cc0527f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974610ce0527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3610d00527f1f5d69f8adc7def353cac5301331f66a6aa12c3bdc46ba8509d81c1922944c1e610d20527f050a358c8ee74901afd6bebdda35a25be99ba631232abec0bb7df23428e219eb610d40527f1ddbf91ceeed88a8c66e9bf8d089b3098dc083f15790870796a7267f25cf9bf0610d60527f0ab4e80b0091cd40070294f754e54b127e2000572c0344c2838aeeaf251eb391610d80526108c435600414916044351416167f101e32209fbc2afdda2eab08eed3e3e9323ecd92e5c6b9508204b948de1ae5f36000526020906108e45b6109648110614a7957506064915b6101248310614a66576000908120600080516020614ac08339815191528106610da0529052610dc0916020608082015b808310614a4f5750610c4090610c4794610107565b939061012a565b926101008201935b848310614a3a5790610c6091610107565b610140830193915b848410614a295790610c7991610107565b929061046082015b808310614a005750610ca7610cb692610ca0610cbe96610cad94610107565b929061012a565b946100af565b90929193610107565b9290506100af565b5050806107a051614900575b508015614688576106e051610e20519081906000905b8082106148e25750506107205192610f2061078051926006840160051b80830194156148d6575b50610760515b8483106148b157505050610d5a600080516020614ac08339815191527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008508918284526020840190610150565b93600080516020614ac0833981519152610f209261070051900991610760515b84821061488b5750505050610f4051610f60915b610fe0831061486b576000926108e4906107805160051b8201905b818310614843575050505191610f205191610fe0519085610f205284610f405283610f605280610f805281610fa05282610fc052610e00519283809281610de0519381610dc0519381610e2051600080516020614ac083398151915290870999818d600080516020614ac08339815191526108043581036107e43508600080516020614ac08339815191526108243581036107e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152908608600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099d81600080516020614ac08339815191526108243581036107e43508600080516020614ac08339815191529085099d600080516020614ac08339815191528d61054435088b600080516020614ac08339815191526101006104243509600080516020614ac08339815191529081036103e43508600080516020614ac083398151915290610564350990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152906107a43509600080516020614ac0833981519152038d6108243590600080516020614ac08339815191529108600080516020614ac08339815191528d6107e4350890600080516020614ac08339815191529109600080516020614ac0833981519152906107c4350990600080516020614ac08339815191529108600080516020614ac0833981519152848908600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099c6107a435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac08339815191529085099b600080516020614ac08339815191526107a43581038809600080516020614ac08339815191529088089a600080516020614ac08339815191528a870883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203846106e435600080516020614ac0833981519152908609600080516020614ac083398151915290850890600080516020614ac0833981519152910885600080516020614ac08339815191526106c4358709600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac083398151915203908380600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910881600080516020614ac0833981519152600080516020614b408339815191528909600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203916106e435600080516020614ac0833981519152908609600080516020614ac0833981519152910890600080516020614ac0833981519152910884600080516020614ac08339815191526106c4358609600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910898600080516020614ac083398151915290860882600080516020614ac0833981519152600080516020614b408339815191528609600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910885600080516020614ac0833981519152886104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac083398151915203836106a435600080516020614ac0833981519152908509600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910884600080516020614ac0833981519152610684358609600080516020614ac083398151915290610404350890600080516020614ac0833981519152910885600080516020614ac0833981519152610664358709600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910886600080516020614ac0833981519152610644358809600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152039282600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089083600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac08339815191529108908480600080516020614ac0833981519152600080516020614b408339815191528409600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910891600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac08339815191520391806106a435600080516020614ac0833981519152908409600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089181600080516020614ac0833981519152610684358309600080516020614ac083398151915290610404350890600080516020614ac083398151915291089180600080516020614ac0833981519152610664358409600080516020614ac0833981519152906103e4350890600080516020614ac083398151915291089161064435600080516020614ac08339815191529109600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291089381600080516020614ac08339815191526107443581036107643508600080516020614ac08339815191529083099361076435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac0833981519152910991600080516020614ac0833981519152610704358209600080516020614ac083398151915203600080516020614ac083398151915291088161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161044435600080516020614ac083398151915203610404356104643561040435600080516020614ac0833981519152036103e43590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e435610464356103e435600080516020614ac0833981519152036104043590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac083398151915261046435810360010861046435600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac083398151915290610604350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e4350981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105c4350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a4350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109610fe0526103a4356000526103c435602052610364905b816102641061481b57826000516110005260205161102052600080516020614ac08339815191528080610e205181808061072051816107405180988188819997829896839709610420528061040052828282096103e0520909090909096103c052610e80516104406103c0905b6104c081106147f757836104605161048051906104a05180600080516020614ac083398151915284840990600080516020614ac083398151915291096104c0526104405191826104e0528260005281600080516020614ac083398151915282850990600080516020614ac08339815191529109610500528061052052600080516020614ac083398151915281840961054052600080516020614ac0833981519152828409610560526103e0519161040051938161042051918483600080516020614ac083398151915203600080516020614ac0833981519152908808600080516020614ac0833981519152898103890890600080516020614ac0833981519152910990600080516020614ac0833981519152910960205287600080516020614ac08339815191528481038908600080516020614ac08339815191528881038a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960405281600080516020614ac08339815191528881038508600080516020614ac0833981519152888103860890600080516020614ac0833981519152910990600080516020614ac08339815191529109606052600080516020614ac0833981519152886001096080526103c05190600080516020614ac08339815191528481038308600080516020614ac0833981519152898103840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960a052600080516020614ac0833981519152038783600080516020614ac083398151915203600080516020614ac0833981519152908908600080516020614ac0833981519152838a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960c052600080516020614ac0833981519152878103840890600080516020614ac083398151915290840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960e05285600080516020614ac0833981519152828103870890600080516020614ac083398151915291096101005284600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961012052600080516020614ac0833981519152838103830890600080516020614ac0833981519152910961014052600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961016052613fff9061023c565b600051806104e0526105005b61058081106147d957610e40516020516040516060518693600080516020614ac083398151915280610424358409818681868187818b81806103e43583099781808080806104a43586099a610444359009956104043590099261048435900960000808080908080861058052608051600080516020614ac083398151915280610fe05183098184818061062435870960000809086106e45b80610624106147b457506106045b806104a41061478f575061050051908380600080516020614ac083398151915261046435860992600080516020614ac083398151915261082435870991600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291096105a05260a05160c05160e051926105205161072435600080516020614ac0833981519152908609600080516020614ac0833981519152610704358509600080516020614ac0833981519152610744358709600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105c05261010051956101205195610540519061078435600080516020614ac083398151915290890990600080516020614ac0833981519152610764358b0990600080516020614ac08339815191526107c4358b09600080516020614ac08339815191526107a4358d09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105e05261014051986101605198610560516107e435600080516020614ac0833981519152908c09600080516020614ac0833981519152610804358e09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910961060052600080516020614ac0833981519152910890600080516020614ac083398151915291086106205261064052600080516020614ac0833981519152910890600080516020614ac0833981519152910861066052600080516020614ac0833981519152910861068052600080516020614ac083398151915291086106a05261062060005b60a0811061477f576143c483610320565b600080516020614ac08339815191526106005160805109610e6051919060606105e05b60a08210614754578461444c61443d61442561441888886110405260a43560005260c435602052610e405190610419565b6084359060643590610402565b610264356080526102843560a052610e405190610442565b6110205190611000519061042c565b610d605b80610a201061472a5761467861461961453c6145f161453c6145c961453c89600080516020614ac0833981519152806145a861453c61459b61458c8f61456c61453c8761454961453c8c8361452f6145216144db6145126144db6145036144db6144f4889f6144e56144db6144cc6144db93610e405190610442565b6109c051906109a0519061042c565b610e405190610442565b6109805190610960519061042c565b610a405190610a20519061042c565b610a0051906109e0519061042c565b6101843590610164359061042c565b610104359060e4359061042c565b9161050051900990610442565b60a0519060805190610402565b9a610e60519009996101a4356080526101c43560a05283610520518c0990610442565b97610e6051900996610224356080526102443560a052610e405190610442565b61020435906101e4359061042c565b8361054051870990610442565b92610e60519009610124356080526101443560a05261056051900990610442565b610820516080526108405160a05261104051600080516020614ac08339815191520390610442565b610844356080526108643560a0526104c051600080516020614ac08339815191520390610442565b610884358060805261463a61453c6108a435938460a052610e805190610442565b906000519161106091838352602051611080948186526110a0968388526110c0938185526107a05161468d575b505050505193519251915190610455565b1561468857600160005260206000f35b600080fd5b9161470b9391614716959693610ea051600052610ec051602052610ee0938451604052610f0093845160605260805260a05260c05260e0526146f36146e8600080516020614ac0833981519152610100600020068095610419565b895190895190610402565b91600051885260205189525160005251602052610419565b825190865190610402565b906000518552602051815286808080614667565b9061473c61474a91610e405190610442565b60208301519083519061042c565b90603f1901614450565b9091600080516020614ac083398151915290818681855187510992090891601f1990810191016143e7565b81518152602091820191016143b3565b90600080516020614ac0833981519152908185818535870992090890601f19016140b1565b90600080516020614ac0833981519152908185818535870992090890601f19016140a3565b80600080516020614ac083398151915283602093510981520161400b565b60208091600080516020614ac0833981519152845181038608815201910190613c56565b909161482a8261483892610419565b602084013590843590610402565b91603f190190613be9565b9091946020600080516020614ac0833981519152819281893586510990089601929101610da9565b9190600080516020614ac083398151915260209183519008910191610d8e565b600080516020614ac0833981519152838282806020958751098809855209910190610d7a565b60209087600080516020614ac083398151915291828181038608865209920191610d0d565b610f4001935086610d07565b9092600080516020614ac08339815191528160019209930190610ce0565b90506107e0519061080051916107c05160051b806108e401918235926108e48260051b840101356108e48360061b85010135906108e460038560051b02860101359588965b846108e48760051b89010181101561499957906020808c93019384358b1b0194818960051b890101358b1b0195818960061b890101358b1b019660038960051b02010135891b019701969392919093614945565b50979450975093509350507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790816003818087800987090882868009149180600381808a80098a09089084800914161693610ea052610ec052610ee052610f005281610cca565b9160208181923595600080516020614ac083398151915287101695875201940191939193610c81565b92614a33926100af565b9092610c68565b9291614a45926100af565b9192909190610c4f565b939291614a5b926100af565b929391929091610c2b565b9091614a71926100af565b919091610bfb565b9060208091600080516020614ac083398151915284351016928035855201920191610bed56fe066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c80cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff92b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e809226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2a264697066735822122039310bb8e31d3c3f921d67604b2b37e972cbb381d1708e36447f4c8b27d321d764736f6c63430008120033","deployedBytecode":"0x6080604052600436101561001257600080fd5b6000803560e01c631e8e1e131461002857600080fd5b346100a05760403660031901126100a05767ffffffffffffffff6004358181116100a357366023820112156100a35780600401358281116100ab57369101602401116100a7576024358181116100a357366023820112156100a35780600401359182116100a357602490369260051b010111156104b5575b80fd5b8280fd5b5080fd5b8380fd5b9290604080918035956020820135907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780600381808c80098c0908818480091491818410918a10161616968652602086015201920190565b602091600020600080516020614ac0833981519152810682526000520190602090565b602090600182536021600020600080516020614ac0833981519152810682526000520190565b91909182610f2091825190610f40925b601f19810184106102145750600080516020614ac0833981519152809284519009602087526020808801526020604088015260608701527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808701528160a087015260208660c08160055afa1694805192601f19809201905b80610f40106101fa5750505080610f4051830991835190099152610f4052565b8280918580855189099782519009968152019101906101da565b959291600080516020614ac08339815191529083519009918284526020809101930195610160565b90610180916000516020915b61016083106102f957600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106102df5750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906102bf565b9391906020600080516020614ac08339815191528192845190099283855201920193610248565b9060a0916000516020915b608083106103db57600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106103c15750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906103a1565b9391906020600080516020614ac0833981519152819284519009928385520192019361032b565b91906040526060526040600060808160065afa1690565b906040526040600060608160075afa1690565b919060c05260e05260406080808060065afa1690565b9060c0526040608060608160075afa1690565b9392919060005260205261086051604052610880516060526108a0516080526108c05160a05260c05260e0526108e05161010052610900516101205261092051610140526109405161016052602060006101808160085afa166000511690565b60017f101e32209fbc2afdda2eab08eed3e3e9323ecd92e5c6b9508204b948de1ae5f36106c052600b6106e0527f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610700527f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610720527f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610740527f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d3026107605260046107805260006107a05260006107c05260006107e052600061080052600161082052600261084052610860907f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c282527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed610880527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6108a0527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6108c0527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6108e0527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e610900527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145610920527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff610940527f17e7cb6a30c4ce9a3d8de604dbaf517b1f23e440acb9e7345938ff5b245a403e610960527f1c31a42d7da360cce8262e21fb9a5ef26a23ebbcf6995ccab89aee400c2e994b610980527f05591c7faa2c9eaf1c9573a84bddec303219abf496af0899ed438853227dd0566109a0527f2cfa24fde576750b4036dffe40105e6b7244f63843ec74d9d0aad48ba413287c6109c0527f299b12e65399dcea3f1e0ce046cf5f93ce7ba9f779bfa39e7f0c6d4c19628a906109e0527f21c577122a3d1f4d019b93e724d981b0653ed94f492eafec50945231935f9a95610a00527f19d9220141bef25921d474c6e634d06dfb7d7904e59a4ec486a148b00bfd38a3610a20527f2f38511e53688056b693c84ef69a7ae2b9ab482906dc46ae9d9522fd3ce098b6610a40527f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa4610a60527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c0610a80527f19206bebc5cc4a5b692c58bc61e7aec6d3fbb8344e39a133699f74e6f40ec2a8610aa0527f0678c7bdd141bd26cbe9336f5dcf1c5a8cf21a5927afd1b2f393152ee02a6a78610ac0527f1c6e2343333783b4f48ae7d2681afb3cdf6a4dfbc83a500cb06db3265ad3e5d5610ae0527f1a3d836d4325ff30144c1e2038a4d4025fd0f01af24cfd8dfd54018e64f3b098610b00527f203b21a648fbfb96459640bbc5b41852dd1efc1209c89b635ba638dcb929da6b610b20527f04e7002f06f2091a44afcd311e93c22f46dd9f3207b5bcc34f0ca7652098f097610b40527f20ab7490b42f3f7b2b0bbe601a09d72ee93f924801d597f48cf2d443751d5f91610b60527f2bca2f1762946a05fb1632550c6cb12c02d18d9bee5bdd4212ca7342888720fd610b80527f09e3303245e3b00aca894e9fba3d5184ff3739c664e363f205d42feee327b6aa610ba0527f13ce92283cc6f648bdda86182d91852aab5c6088ab008d9cdb5522fcbf5c6289610bc0527f08a503e7a16684a81991dbfc5ec84c9f4b0f7a506ddf26b67d305ebfc0f81743610be0527f08a2d8e1760ffb16f70147f8b44e781ced65a1e677a786cdd8bc9f947b36131c610c00527f25632bc8012c6cbc6ddda661a9729f544c54620700c3840c01ca5b57e61a1ffe610c20527f2ba5764c663a4b2892343c303da0f5664e3f620dd6b851a711781704292fd11a610c40527f07cfe4f3152b1996e8eafd718451356c2044e4c239fcc29eb3a81d392e1b44ad610c60527f255673e224a594e53fd5b1b4dcd46329e72a04e16056dea3d5a17e31291a9960610c80527f136cb14b351f3b43b5e618c5c49022588edd48550f4e7d69309442e8b83d0d22610ca0527f0ee9bbdfce93815e79aabfc5ec92a52346c46a45e17bc5bc9ad8155e982c9cac610cc0527f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974610ce0527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3610d00527f1f5d69f8adc7def353cac5301331f66a6aa12c3bdc46ba8509d81c1922944c1e610d20527f050a358c8ee74901afd6bebdda35a25be99ba631232abec0bb7df23428e219eb610d40527f1ddbf91ceeed88a8c66e9bf8d089b3098dc083f15790870796a7267f25cf9bf0610d60527f0ab4e80b0091cd40070294f754e54b127e2000572c0344c2838aeeaf251eb391610d80526108c435600414916044351416167f101e32209fbc2afdda2eab08eed3e3e9323ecd92e5c6b9508204b948de1ae5f36000526020906108e45b6109648110614a7957506064915b6101248310614a66576000908120600080516020614ac08339815191528106610da0529052610dc0916020608082015b808310614a4f5750610c4090610c4794610107565b939061012a565b926101008201935b848310614a3a5790610c6091610107565b610140830193915b848410614a295790610c7991610107565b929061046082015b808310614a005750610ca7610cb692610ca0610cbe96610cad94610107565b929061012a565b946100af565b90929193610107565b9290506100af565b5050806107a051614900575b508015614688576106e051610e20519081906000905b8082106148e25750506107205192610f2061078051926006840160051b80830194156148d6575b50610760515b8483106148b157505050610d5a600080516020614ac08339815191527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008508918284526020840190610150565b93600080516020614ac0833981519152610f209261070051900991610760515b84821061488b5750505050610f4051610f60915b610fe0831061486b576000926108e4906107805160051b8201905b818310614843575050505191610f205191610fe0519085610f205284610f405283610f605280610f805281610fa05282610fc052610e00519283809281610de0519381610dc0519381610e2051600080516020614ac083398151915290870999818d600080516020614ac08339815191526108043581036107e43508600080516020614ac08339815191526108243581036107e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152908608600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099d81600080516020614ac08339815191526108243581036107e43508600080516020614ac08339815191529085099d600080516020614ac08339815191528d61054435088b600080516020614ac08339815191526101006104243509600080516020614ac08339815191529081036103e43508600080516020614ac083398151915290610564350990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152906107a43509600080516020614ac0833981519152038d6108243590600080516020614ac08339815191529108600080516020614ac08339815191528d6107e4350890600080516020614ac08339815191529109600080516020614ac0833981519152906107c4350990600080516020614ac08339815191529108600080516020614ac0833981519152848908600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099c6107a435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac08339815191529085099b600080516020614ac08339815191526107a43581038809600080516020614ac08339815191529088089a600080516020614ac08339815191528a870883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203846106e435600080516020614ac0833981519152908609600080516020614ac083398151915290850890600080516020614ac0833981519152910885600080516020614ac08339815191526106c4358709600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac083398151915203908380600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910881600080516020614ac0833981519152600080516020614b408339815191528909600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203916106e435600080516020614ac0833981519152908609600080516020614ac0833981519152910890600080516020614ac0833981519152910884600080516020614ac08339815191526106c4358609600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910898600080516020614ac083398151915290860882600080516020614ac0833981519152600080516020614b408339815191528609600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910885600080516020614ac0833981519152886104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac083398151915203836106a435600080516020614ac0833981519152908509600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910884600080516020614ac0833981519152610684358609600080516020614ac083398151915290610404350890600080516020614ac0833981519152910885600080516020614ac0833981519152610664358709600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910886600080516020614ac0833981519152610644358809600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152039282600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089083600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac08339815191529108908480600080516020614ac0833981519152600080516020614b408339815191528409600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910891600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac08339815191520391806106a435600080516020614ac0833981519152908409600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089181600080516020614ac0833981519152610684358309600080516020614ac083398151915290610404350890600080516020614ac083398151915291089180600080516020614ac0833981519152610664358409600080516020614ac0833981519152906103e4350890600080516020614ac083398151915291089161064435600080516020614ac08339815191529109600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291089381600080516020614ac08339815191526107443581036107643508600080516020614ac08339815191529083099361076435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac0833981519152910991600080516020614ac0833981519152610704358209600080516020614ac083398151915203600080516020614ac083398151915291088161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161044435600080516020614ac083398151915203610404356104643561040435600080516020614ac0833981519152036103e43590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e435610464356103e435600080516020614ac0833981519152036104043590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac083398151915261046435810360010861046435600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac083398151915290610604350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e4350981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105c4350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a4350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109610fe0526103a4356000526103c435602052610364905b816102641061481b57826000516110005260205161102052600080516020614ac08339815191528080610e205181808061072051816107405180988188819997829896839709610420528061040052828282096103e0520909090909096103c052610e80516104406103c0905b6104c081106147f757836104605161048051906104a05180600080516020614ac083398151915284840990600080516020614ac083398151915291096104c0526104405191826104e0528260005281600080516020614ac083398151915282850990600080516020614ac08339815191529109610500528061052052600080516020614ac083398151915281840961054052600080516020614ac0833981519152828409610560526103e0519161040051938161042051918483600080516020614ac083398151915203600080516020614ac0833981519152908808600080516020614ac0833981519152898103890890600080516020614ac0833981519152910990600080516020614ac0833981519152910960205287600080516020614ac08339815191528481038908600080516020614ac08339815191528881038a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960405281600080516020614ac08339815191528881038508600080516020614ac0833981519152888103860890600080516020614ac0833981519152910990600080516020614ac08339815191529109606052600080516020614ac0833981519152886001096080526103c05190600080516020614ac08339815191528481038308600080516020614ac0833981519152898103840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960a052600080516020614ac0833981519152038783600080516020614ac083398151915203600080516020614ac0833981519152908908600080516020614ac0833981519152838a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960c052600080516020614ac0833981519152878103840890600080516020614ac083398151915290840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960e05285600080516020614ac0833981519152828103870890600080516020614ac083398151915291096101005284600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961012052600080516020614ac0833981519152838103830890600080516020614ac0833981519152910961014052600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961016052613fff9061023c565b600051806104e0526105005b61058081106147d957610e40516020516040516060518693600080516020614ac083398151915280610424358409818681868187818b81806103e43583099781808080806104a43586099a610444359009956104043590099261048435900960000808080908080861058052608051600080516020614ac083398151915280610fe05183098184818061062435870960000809086106e45b80610624106147b457506106045b806104a41061478f575061050051908380600080516020614ac083398151915261046435860992600080516020614ac083398151915261082435870991600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291096105a05260a05160c05160e051926105205161072435600080516020614ac0833981519152908609600080516020614ac0833981519152610704358509600080516020614ac0833981519152610744358709600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105c05261010051956101205195610540519061078435600080516020614ac083398151915290890990600080516020614ac0833981519152610764358b0990600080516020614ac08339815191526107c4358b09600080516020614ac08339815191526107a4358d09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105e05261014051986101605198610560516107e435600080516020614ac0833981519152908c09600080516020614ac0833981519152610804358e09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910961060052600080516020614ac0833981519152910890600080516020614ac083398151915291086106205261064052600080516020614ac0833981519152910890600080516020614ac0833981519152910861066052600080516020614ac0833981519152910861068052600080516020614ac083398151915291086106a05261062060005b60a0811061477f576143c483610320565b600080516020614ac08339815191526106005160805109610e6051919060606105e05b60a08210614754578461444c61443d61442561441888886110405260a43560005260c435602052610e405190610419565b6084359060643590610402565b610264356080526102843560a052610e405190610442565b6110205190611000519061042c565b610d605b80610a201061472a5761467861461961453c6145f161453c6145c961453c89600080516020614ac0833981519152806145a861453c61459b61458c8f61456c61453c8761454961453c8c8361452f6145216144db6145126144db6145036144db6144f4889f6144e56144db6144cc6144db93610e405190610442565b6109c051906109a0519061042c565b610e405190610442565b6109805190610960519061042c565b610a405190610a20519061042c565b610a0051906109e0519061042c565b6101843590610164359061042c565b610104359060e4359061042c565b9161050051900990610442565b60a0519060805190610402565b9a610e60519009996101a4356080526101c43560a05283610520518c0990610442565b97610e6051900996610224356080526102443560a052610e405190610442565b61020435906101e4359061042c565b8361054051870990610442565b92610e60519009610124356080526101443560a05261056051900990610442565b610820516080526108405160a05261104051600080516020614ac08339815191520390610442565b610844356080526108643560a0526104c051600080516020614ac08339815191520390610442565b610884358060805261463a61453c6108a435938460a052610e805190610442565b906000519161106091838352602051611080948186526110a0968388526110c0938185526107a05161468d575b505050505193519251915190610455565b1561468857600160005260206000f35b600080fd5b9161470b9391614716959693610ea051600052610ec051602052610ee0938451604052610f0093845160605260805260a05260c05260e0526146f36146e8600080516020614ac0833981519152610100600020068095610419565b895190895190610402565b91600051885260205189525160005251602052610419565b825190865190610402565b906000518552602051815286808080614667565b9061473c61474a91610e405190610442565b60208301519083519061042c565b90603f1901614450565b9091600080516020614ac083398151915290818681855187510992090891601f1990810191016143e7565b81518152602091820191016143b3565b90600080516020614ac0833981519152908185818535870992090890601f19016140b1565b90600080516020614ac0833981519152908185818535870992090890601f19016140a3565b80600080516020614ac083398151915283602093510981520161400b565b60208091600080516020614ac0833981519152845181038608815201910190613c56565b909161482a8261483892610419565b602084013590843590610402565b91603f190190613be9565b9091946020600080516020614ac0833981519152819281893586510990089601929101610da9565b9190600080516020614ac083398151915260209183519008910191610d8e565b600080516020614ac0833981519152838282806020958751098809855209910190610d7a565b60209087600080516020614ac083398151915291828181038608865209920191610d0d565b610f4001935086610d07565b9092600080516020614ac08339815191528160019209930190610ce0565b90506107e0519061080051916107c05160051b806108e401918235926108e48260051b840101356108e48360061b85010135906108e460038560051b02860101359588965b846108e48760051b89010181101561499957906020808c93019384358b1b0194818960051b890101358b1b0195818960061b890101358b1b019660038960051b02010135891b019701969392919093614945565b50979450975093509350507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790816003818087800987090882868009149180600381808a80098a09089084800914161693610ea052610ec052610ee052610f005281610cca565b9160208181923595600080516020614ac083398151915287101695875201940191939193610c81565b92614a33926100af565b9092610c68565b9291614a45926100af565b9192909190610c4f565b939291614a5b926100af565b929391929091610c2b565b9091614a71926100af565b919091610bfb565b9060208091600080516020614ac083398151915284351016928035855201920191610bed56fe066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c80cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff92b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e809226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2a264697066735822122039310bb8e31d3c3f921d67604b2b37e972cbb381d1708e36447f4c8b27d321d764736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file +{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/InclusionVerifier.sol","abi":[{"inputs":[{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"instances","type":"uint256[]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x6080806040523461001657614b95908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c631e8e1e131461002857600080fd5b346100a05760403660031901126100a05767ffffffffffffffff6004358181116100a357366023820112156100a35780600401358281116100ab57369101602401116100a7576024358181116100a357366023820112156100a35780600401359182116100a357602490369260051b010111156104b5575b80fd5b8280fd5b5080fd5b8380fd5b9290604080918035956020820135907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780600381808c80098c0908818480091491818410918a10161616968652602086015201920190565b602091600020600080516020614ac0833981519152810682526000520190602090565b602090600182536021600020600080516020614ac0833981519152810682526000520190565b91909182610f2091825190610f40925b601f19810184106102145750600080516020614ac0833981519152809284519009602087526020808801526020604088015260608701527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808701528160a087015260208660c08160055afa1694805192601f19809201905b80610f40106101fa5750505080610f4051830991835190099152610f4052565b8280918580855189099782519009968152019101906101da565b959291600080516020614ac08339815191529083519009918284526020809101930195610160565b90610180916000516020915b61016083106102f957600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106102df5750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906102bf565b9391906020600080516020614ac08339815191528192845190099283855201920193610248565b9060a0916000516020915b608083106103db57600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106103c15750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906103a1565b9391906020600080516020614ac0833981519152819284519009928385520192019361032b565b91906040526060526040600060808160065afa1690565b906040526040600060608160075afa1690565b919060c05260e05260406080808060065afa1690565b9060c0526040608060608160075afa1690565b9392919060005260205261086051604052610880516060526108a0516080526108c05160a05260c05260e0526108e05161010052610900516101205261092051610140526109405161016052602060006101808160085afa166000511690565b60017f10f28bc710a8bdd00dd701df2f5fc4f5ccdb260238eba6f819db692f79dc3dc96106c052600b6106e0527f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610700527f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610720527f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610740527f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d3026107605260046107805260006107a05260006107c05260006107e052600061080052600161082052600261084052610860907f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c282527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed610880527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6108a0527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6108c0527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6108e0527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e610900527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145610920527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff610940527f010920a3471867216dc9dd6b478c16842fb5aca434fe6c9bf1622c4abd70381a610960527f300e30930f1a05253b28b6b139f2c38025d99b7a54e641f1d6ff2797d113c118610980527f05e7899750f7abeae5d19c16666c47618fce810326b125d253dd41fb817dd65a6109a0527f1e0e399ce46f208ab3f43aad0222f4dd37b8327b9f7afffa9cf9ee214e2460dd6109c0527f22274e4efd4197dd6515994652d5beafcc7af94313d33e049cf5a1e464b523956109e0527f0ebb470e19409fcd84c0358c04300dc38cba0240141ddeb899ad9cca90167a64610a00527f162baf6245e2cec59bc93bc2302527d299cdb50e100f14895f170f316a2a2643610a20527f172a6f183e2ddc0607d23fd3daf4b23110b81d8a9d0a4e8d3d07ba24a007e04b610a40527f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa4610a60527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c0610a80527f01021a51384124c6844f2ba0e40e2545f26f280a79745c9164b0a56f1ee54d56610aa0527f2533607ba6f153a0126a8450a3cf47946933c93eaf69c996236b45603179c914610ac0527f1f59be81b3fd7d290930430d204c1a866937862306d75be70fedfe13e565ce0b610ae0527f05931c531cd08b4aa937245293af81c4532fc4c01387d5b539d29f6c4ae00031610b00527f203b21a648fbfb96459640bbc5b41852dd1efc1209c89b635ba638dcb929da6b610b20527f04e7002f06f2091a44afcd311e93c22f46dd9f3207b5bcc34f0ca7652098f097610b40527f20ab7490b42f3f7b2b0bbe601a09d72ee93f924801d597f48cf2d443751d5f91610b60527f2bca2f1762946a05fb1632550c6cb12c02d18d9bee5bdd4212ca7342888720fd610b80527f2aaba546cdd9969ef0aecc85b2aaa19b6e9639879962661415c8f0df426bac0c610ba0527f12b15327bcfbe7d9e9de1bc648ba3bdf910087362179a0b403cf70bad1c093c8610bc0527f25909db723a8021ffe088c50525d6d260f9157be7a7c194b6f315386a46cdab8610be0527f25cbeae8ec2a8a2f74844f5e3276ed94079907bed6d7b1b26ed695328fe7bcae610c00527f26bffd26dd8f5f7679281f8d1a432690e07b15cbdf684fe456aa1277515e1730610c20527f015a3f09c82a770a69d67583d7049d83d69b7b8e03d38484497215cdc5979556610c40527f1ee4241e91ac391756b0b9893ac1e34ea95c6dd689e7dca12c62a6ce943960f1610c60527f10ad75f199bf1fb9335b91c20db6cd8958dcb2fe11983bc77cdb4036e57e59ca610c80527f05eb5d19e589c11e0bb2200d66da829955545481885cfbc9099ec6a53e266ed2610ca0527f25ac1d9849f9f448cecc7ead7d48670f66bbfe7df8e248bd818a954df6936c27610cc0527f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974610ce0527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3610d00527f1b95c5dc9bae0fb3f8208684042e57e0fcfbc3774af9ae0903ab9e9ddb4f89fd610d20527f1e8564e01419713739871224ce15f4c4b51e6af161d6e07a178e6545879035bf610d40527f1cefc889639cf98f94d831ea41c356929f9317778dda05ba0c5885401638db67610d60527f1e0466deb22a86d9122bc7180b7d293e47288244abf1450a5cd63a3289a457ca610d80526108c435600414916044351416167f10f28bc710a8bdd00dd701df2f5fc4f5ccdb260238eba6f819db692f79dc3dc96000526020906108e45b6109648110614a7957506064915b6101248310614a66576000908120600080516020614ac08339815191528106610da0529052610dc0916020608082015b808310614a4f5750610c4090610c4794610107565b939061012a565b926101008201935b848310614a3a5790610c6091610107565b610140830193915b848410614a295790610c7991610107565b929061046082015b808310614a005750610ca7610cb692610ca0610cbe96610cad94610107565b929061012a565b946100af565b90929193610107565b9290506100af565b5050806107a051614900575b508015614688576106e051610e20519081906000905b8082106148e25750506107205192610f2061078051926006840160051b80830194156148d6575b50610760515b8483106148b157505050610d5a600080516020614ac08339815191527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008508918284526020840190610150565b93600080516020614ac0833981519152610f209261070051900991610760515b84821061488b5750505050610f4051610f60915b610fe0831061486b576000926108e4906107805160051b8201905b818310614843575050505191610f205191610fe0519085610f205284610f405283610f605280610f805281610fa05282610fc052610e00519283809281610de0519381610dc0519381610e2051600080516020614ac083398151915290870999818d600080516020614ac08339815191526108043581036107e43508600080516020614ac08339815191526108243581036107e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152908608600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099d81600080516020614ac08339815191526108243581036107e43508600080516020614ac08339815191529085099d600080516020614ac08339815191528d61054435088b600080516020614ac08339815191526101006104243509600080516020614ac08339815191529081036103e43508600080516020614ac083398151915290610564350990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152906107a43509600080516020614ac0833981519152038d6108243590600080516020614ac08339815191529108600080516020614ac08339815191528d6107e4350890600080516020614ac08339815191529109600080516020614ac0833981519152906107c4350990600080516020614ac08339815191529108600080516020614ac0833981519152848908600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099c6107a435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac08339815191529085099b600080516020614ac08339815191526107a43581038809600080516020614ac08339815191529088089a600080516020614ac08339815191528a870883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203846106e435600080516020614ac0833981519152908609600080516020614ac083398151915290850890600080516020614ac0833981519152910885600080516020614ac08339815191526106c4358709600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac083398151915203908380600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910881600080516020614ac0833981519152600080516020614b408339815191528909600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203916106e435600080516020614ac0833981519152908609600080516020614ac0833981519152910890600080516020614ac0833981519152910884600080516020614ac08339815191526106c4358609600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910898600080516020614ac083398151915290860882600080516020614ac0833981519152600080516020614b408339815191528609600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910885600080516020614ac0833981519152886104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac083398151915203836106a435600080516020614ac0833981519152908509600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910884600080516020614ac0833981519152610684358609600080516020614ac083398151915290610404350890600080516020614ac0833981519152910885600080516020614ac0833981519152610664358709600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910886600080516020614ac0833981519152610644358809600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152039282600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089083600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac08339815191529108908480600080516020614ac0833981519152600080516020614b408339815191528409600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910891600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac08339815191520391806106a435600080516020614ac0833981519152908409600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089181600080516020614ac0833981519152610684358309600080516020614ac083398151915290610404350890600080516020614ac083398151915291089180600080516020614ac0833981519152610664358409600080516020614ac0833981519152906103e4350890600080516020614ac083398151915291089161064435600080516020614ac08339815191529109600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291089381600080516020614ac08339815191526107443581036107643508600080516020614ac08339815191529083099361076435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac0833981519152910991600080516020614ac0833981519152610704358209600080516020614ac083398151915203600080516020614ac083398151915291088161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161044435600080516020614ac083398151915203610404356104643561040435600080516020614ac0833981519152036103e43590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e435610464356103e435600080516020614ac0833981519152036104043590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac083398151915261046435810360010861046435600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac083398151915290610604350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e4350981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105c4350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a4350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109610fe0526103a4356000526103c435602052610364905b816102641061481b57826000516110005260205161102052600080516020614ac08339815191528080610e205181808061072051816107405180988188819997829896839709610420528061040052828282096103e0520909090909096103c052610e80516104406103c0905b6104c081106147f757836104605161048051906104a05180600080516020614ac083398151915284840990600080516020614ac083398151915291096104c0526104405191826104e0528260005281600080516020614ac083398151915282850990600080516020614ac08339815191529109610500528061052052600080516020614ac083398151915281840961054052600080516020614ac0833981519152828409610560526103e0519161040051938161042051918483600080516020614ac083398151915203600080516020614ac0833981519152908808600080516020614ac0833981519152898103890890600080516020614ac0833981519152910990600080516020614ac0833981519152910960205287600080516020614ac08339815191528481038908600080516020614ac08339815191528881038a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960405281600080516020614ac08339815191528881038508600080516020614ac0833981519152888103860890600080516020614ac0833981519152910990600080516020614ac08339815191529109606052600080516020614ac0833981519152886001096080526103c05190600080516020614ac08339815191528481038308600080516020614ac0833981519152898103840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960a052600080516020614ac0833981519152038783600080516020614ac083398151915203600080516020614ac0833981519152908908600080516020614ac0833981519152838a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960c052600080516020614ac0833981519152878103840890600080516020614ac083398151915290840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960e05285600080516020614ac0833981519152828103870890600080516020614ac083398151915291096101005284600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961012052600080516020614ac0833981519152838103830890600080516020614ac0833981519152910961014052600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961016052613fff9061023c565b600051806104e0526105005b61058081106147d957610e40516020516040516060518693600080516020614ac083398151915280610424358409818681868187818b81806103e43583099781808080806104a43586099a610444359009956104043590099261048435900960000808080908080861058052608051600080516020614ac083398151915280610fe05183098184818061062435870960000809086106e45b80610624106147b457506106045b806104a41061478f575061050051908380600080516020614ac083398151915261046435860992600080516020614ac083398151915261082435870991600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291096105a05260a05160c05160e051926105205161072435600080516020614ac0833981519152908609600080516020614ac0833981519152610704358509600080516020614ac0833981519152610744358709600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105c05261010051956101205195610540519061078435600080516020614ac083398151915290890990600080516020614ac0833981519152610764358b0990600080516020614ac08339815191526107c4358b09600080516020614ac08339815191526107a4358d09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105e05261014051986101605198610560516107e435600080516020614ac0833981519152908c09600080516020614ac0833981519152610804358e09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910961060052600080516020614ac0833981519152910890600080516020614ac083398151915291086106205261064052600080516020614ac0833981519152910890600080516020614ac0833981519152910861066052600080516020614ac0833981519152910861068052600080516020614ac083398151915291086106a05261062060005b60a0811061477f576143c483610320565b600080516020614ac08339815191526106005160805109610e6051919060606105e05b60a08210614754578461444c61443d61442561441888886110405260a43560005260c435602052610e405190610419565b6084359060643590610402565b610264356080526102843560a052610e405190610442565b6110205190611000519061042c565b610d605b80610a201061472a5761467861461961453c6145f161453c6145c961453c89600080516020614ac0833981519152806145a861453c61459b61458c8f61456c61453c8761454961453c8c8361452f6145216144db6145126144db6145036144db6144f4889f6144e56144db6144cc6144db93610e405190610442565b6109c051906109a0519061042c565b610e405190610442565b6109805190610960519061042c565b610a405190610a20519061042c565b610a0051906109e0519061042c565b6101843590610164359061042c565b610104359060e4359061042c565b9161050051900990610442565b60a0519060805190610402565b9a610e60519009996101a4356080526101c43560a05283610520518c0990610442565b97610e6051900996610224356080526102443560a052610e405190610442565b61020435906101e4359061042c565b8361054051870990610442565b92610e60519009610124356080526101443560a05261056051900990610442565b610820516080526108405160a05261104051600080516020614ac08339815191520390610442565b610844356080526108643560a0526104c051600080516020614ac08339815191520390610442565b610884358060805261463a61453c6108a435938460a052610e805190610442565b906000519161106091838352602051611080948186526110a0968388526110c0938185526107a05161468d575b505050505193519251915190610455565b1561468857600160005260206000f35b600080fd5b9161470b9391614716959693610ea051600052610ec051602052610ee0938451604052610f0093845160605260805260a05260c05260e0526146f36146e8600080516020614ac0833981519152610100600020068095610419565b895190895190610402565b91600051885260205189525160005251602052610419565b825190865190610402565b906000518552602051815286808080614667565b9061473c61474a91610e405190610442565b60208301519083519061042c565b90603f1901614450565b9091600080516020614ac083398151915290818681855187510992090891601f1990810191016143e7565b81518152602091820191016143b3565b90600080516020614ac0833981519152908185818535870992090890601f19016140b1565b90600080516020614ac0833981519152908185818535870992090890601f19016140a3565b80600080516020614ac083398151915283602093510981520161400b565b60208091600080516020614ac0833981519152845181038608815201910190613c56565b909161482a8261483892610419565b602084013590843590610402565b91603f190190613be9565b9091946020600080516020614ac0833981519152819281893586510990089601929101610da9565b9190600080516020614ac083398151915260209183519008910191610d8e565b600080516020614ac0833981519152838282806020958751098809855209910190610d7a565b60209087600080516020614ac083398151915291828181038608865209920191610d0d565b610f4001935086610d07565b9092600080516020614ac08339815191528160019209930190610ce0565b90506107e0519061080051916107c05160051b806108e401918235926108e48260051b840101356108e48360061b85010135906108e460038560051b02860101359588965b846108e48760051b89010181101561499957906020808c93019384358b1b0194818960051b890101358b1b0195818960061b890101358b1b019660038960051b02010135891b019701969392919093614945565b50979450975093509350507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790816003818087800987090882868009149180600381808a80098a09089084800914161693610ea052610ec052610ee052610f005281610cca565b9160208181923595600080516020614ac083398151915287101695875201940191939193610c81565b92614a33926100af565b9092610c68565b9291614a45926100af565b9192909190610c4f565b939291614a5b926100af565b929391929091610c2b565b9091614a71926100af565b919091610bfb565b9060208091600080516020614ac083398151915284351016928035855201920191610bed56fe066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c80cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff92b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e809226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2a2646970667358221220a0e58ae7dd3fb0f443e0d062395c088c727c1d4c080852f27a12ca461cdb486d64736f6c63430008120033","deployedBytecode":"0x6080604052600436101561001257600080fd5b6000803560e01c631e8e1e131461002857600080fd5b346100a05760403660031901126100a05767ffffffffffffffff6004358181116100a357366023820112156100a35780600401358281116100ab57369101602401116100a7576024358181116100a357366023820112156100a35780600401359182116100a357602490369260051b010111156104b5575b80fd5b8280fd5b5080fd5b8380fd5b9290604080918035956020820135907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4780600381808c80098c0908818480091491818410918a10161616968652602086015201920190565b602091600020600080516020614ac0833981519152810682526000520190602090565b602090600182536021600020600080516020614ac0833981519152810682526000520190565b91909182610f2091825190610f40925b601f19810184106102145750600080516020614ac0833981519152809284519009602087526020808801526020604088015260608701527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808701528160a087015260208660c08160055afa1694805192601f19809201905b80610f40106101fa5750505080610f4051830991835190099152610f4052565b8280918580855189099782519009968152019101906101da565b959291600080516020614ac08339815191529083519009918284526020809101930195610160565b90610180916000516020915b61016083106102f957600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106102df5750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906102bf565b9391906020600080516020614ac08339815191528192845190099283855201920193610248565b9060a0916000516020915b608083106103db57600080516020614ac0833981519152809284519009602086526020808701526020604087015260608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff60808601528160a086015260208560c08160055afa1693805192601f19809201905b806020106103c15750505080602051830991600051900990600052602052565b8280918580855189099782519009968152019101906103a1565b9391906020600080516020614ac0833981519152819284519009928385520192019361032b565b91906040526060526040600060808160065afa1690565b906040526040600060608160075afa1690565b919060c05260e05260406080808060065afa1690565b9060c0526040608060608160075afa1690565b9392919060005260205261086051604052610880516060526108a0516080526108c05160a05260c05260e0526108e05161010052610900516101205261092051610140526109405161016052602060006101808160085afa166000511690565b60017f10f28bc710a8bdd00dd701df2f5fc4f5ccdb260238eba6f819db692f79dc3dc96106c052600b6106e0527f305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001610700527f14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f610720527f2afd4e77273f1cb3434a4a667929058c156b21573c3f1efc882e708597d7161a610740527f22b55603586d5fc42c6c14c2fc27a028c207da8b2c71cb33d549fa4a2be5d3026107605260046107805260006107a05260006107c05260006107e052600061080052600161082052600261084052610860907f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c282527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed610880527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6108a0527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6108c0527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d6108e0527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e610900527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145610920527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff610940527f010920a3471867216dc9dd6b478c16842fb5aca434fe6c9bf1622c4abd70381a610960527f300e30930f1a05253b28b6b139f2c38025d99b7a54e641f1d6ff2797d113c118610980527f05e7899750f7abeae5d19c16666c47618fce810326b125d253dd41fb817dd65a6109a0527f1e0e399ce46f208ab3f43aad0222f4dd37b8327b9f7afffa9cf9ee214e2460dd6109c0527f22274e4efd4197dd6515994652d5beafcc7af94313d33e049cf5a1e464b523956109e0527f0ebb470e19409fcd84c0358c04300dc38cba0240141ddeb899ad9cca90167a64610a00527f162baf6245e2cec59bc93bc2302527d299cdb50e100f14895f170f316a2a2643610a20527f172a6f183e2ddc0607d23fd3daf4b23110b81d8a9d0a4e8d3d07ba24a007e04b610a40527f22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa4610a60527f0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c0610a80527f01021a51384124c6844f2ba0e40e2545f26f280a79745c9164b0a56f1ee54d56610aa0527f2533607ba6f153a0126a8450a3cf47946933c93eaf69c996236b45603179c914610ac0527f1f59be81b3fd7d290930430d204c1a866937862306d75be70fedfe13e565ce0b610ae0527f05931c531cd08b4aa937245293af81c4532fc4c01387d5b539d29f6c4ae00031610b00527f203b21a648fbfb96459640bbc5b41852dd1efc1209c89b635ba638dcb929da6b610b20527f04e7002f06f2091a44afcd311e93c22f46dd9f3207b5bcc34f0ca7652098f097610b40527f20ab7490b42f3f7b2b0bbe601a09d72ee93f924801d597f48cf2d443751d5f91610b60527f2bca2f1762946a05fb1632550c6cb12c02d18d9bee5bdd4212ca7342888720fd610b80527f2aaba546cdd9969ef0aecc85b2aaa19b6e9639879962661415c8f0df426bac0c610ba0527f12b15327bcfbe7d9e9de1bc648ba3bdf910087362179a0b403cf70bad1c093c8610bc0527f25909db723a8021ffe088c50525d6d260f9157be7a7c194b6f315386a46cdab8610be0527f25cbeae8ec2a8a2f74844f5e3276ed94079907bed6d7b1b26ed695328fe7bcae610c00527f26bffd26dd8f5f7679281f8d1a432690e07b15cbdf684fe456aa1277515e1730610c20527f015a3f09c82a770a69d67583d7049d83d69b7b8e03d38484497215cdc5979556610c40527f1ee4241e91ac391756b0b9893ac1e34ea95c6dd689e7dca12c62a6ce943960f1610c60527f10ad75f199bf1fb9335b91c20db6cd8958dcb2fe11983bc77cdb4036e57e59ca610c80527f05eb5d19e589c11e0bb2200d66da829955545481885cfbc9099ec6a53e266ed2610ca0527f25ac1d9849f9f448cecc7ead7d48670f66bbfe7df8e248bd818a954df6936c27610cc0527f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974610ce0527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3610d00527f1b95c5dc9bae0fb3f8208684042e57e0fcfbc3774af9ae0903ab9e9ddb4f89fd610d20527f1e8564e01419713739871224ce15f4c4b51e6af161d6e07a178e6545879035bf610d40527f1cefc889639cf98f94d831ea41c356929f9317778dda05ba0c5885401638db67610d60527f1e0466deb22a86d9122bc7180b7d293e47288244abf1450a5cd63a3289a457ca610d80526108c435600414916044351416167f10f28bc710a8bdd00dd701df2f5fc4f5ccdb260238eba6f819db692f79dc3dc96000526020906108e45b6109648110614a7957506064915b6101248310614a66576000908120600080516020614ac08339815191528106610da0529052610dc0916020608082015b808310614a4f5750610c4090610c4794610107565b939061012a565b926101008201935b848310614a3a5790610c6091610107565b610140830193915b848410614a295790610c7991610107565b929061046082015b808310614a005750610ca7610cb692610ca0610cbe96610cad94610107565b929061012a565b946100af565b90929193610107565b9290506100af565b5050806107a051614900575b508015614688576106e051610e20519081906000905b8082106148e25750506107205192610f2061078051926006840160051b80830194156148d6575b50610760515b8483106148b157505050610d5a600080516020614ac08339815191527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008508918284526020840190610150565b93600080516020614ac0833981519152610f209261070051900991610760515b84821061488b5750505050610f4051610f60915b610fe0831061486b576000926108e4906107805160051b8201905b818310614843575050505191610f205191610fe0519085610f205284610f405283610f605280610f805281610fa05282610fc052610e00519283809281610de0519381610dc0519381610e2051600080516020614ac083398151915290870999818d600080516020614ac08339815191526108043581036107e43508600080516020614ac08339815191526108243581036107e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152908608600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099d81600080516020614ac08339815191526108243581036107e43508600080516020614ac08339815191529085099d600080516020614ac08339815191528d61054435088b600080516020614ac08339815191526101006104243509600080516020614ac08339815191529081036103e43508600080516020614ac083398151915290610564350990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152906107a43509600080516020614ac0833981519152038d6108243590600080516020614ac08339815191529108600080516020614ac08339815191528d6107e4350890600080516020614ac08339815191529109600080516020614ac0833981519152906107c4350990600080516020614ac08339815191529108600080516020614ac0833981519152848908600080516020614ac083398151915203600080516020614ac08339815191529060010890600080516020614ac083398151915291099c6107a435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac08339815191529085099b600080516020614ac08339815191526107a43581038809600080516020614ac08339815191529088089a600080516020614ac08339815191528a870883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203846106e435600080516020614ac0833981519152908609600080516020614ac083398151915290850890600080516020614ac0833981519152910885600080516020614ac08339815191526106c4358709600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac083398151915203908380600080516020614ac0833981519152600080516020614b408339815191528809600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290840890600080516020614ac0833981519152910881600080516020614ac0833981519152600080516020614b408339815191528909600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610764350990600080516020614ac08339815191529109600080516020614ac083398151915203916106e435600080516020614ac0833981519152908609600080516020614ac0833981519152910890600080516020614ac0833981519152910884600080516020614ac08339815191526106c4358609600080516020614ac083398151915290610464350890600080516020614ac08339815191529108600080516020614ac083398151915290610784350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910898600080516020614ac083398151915290860882600080516020614ac0833981519152600080516020614b408339815191528609600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910883600080516020614ac0833981519152600080516020614b408339815191528709600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac0833981519152910884600080516020614ac0833981519152600080516020614b408339815191528809600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910885600080516020614ac0833981519152886104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac083398151915203836106a435600080516020614ac0833981519152908509600080516020614ac0833981519152906104e4350890600080516020614ac0833981519152910884600080516020614ac0833981519152610684358609600080516020614ac083398151915290610404350890600080516020614ac0833981519152910885600080516020614ac0833981519152610664358709600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910886600080516020614ac0833981519152610644358809600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109600080516020614ac0833981519152039282600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089083600080516020614ac0833981519152600080516020614b408339815191528309600080516020614b40833981519152600080516020614ac08339815191529109600080516020614ac083398151915290610404350890600080516020614ac08339815191529108908480600080516020614ac0833981519152600080516020614b408339815191528409600080516020614ac0833981519152906103e4350890600080516020614ac0833981519152910891600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610704350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ac08339815191520391806106a435600080516020614ac0833981519152908409600080516020614ac0833981519152906104e4350890600080516020614ac083398151915291089181600080516020614ac0833981519152610684358309600080516020614ac083398151915290610404350890600080516020614ac083398151915291089180600080516020614ac0833981519152610664358409600080516020614ac0833981519152906103e4350890600080516020614ac083398151915291089161064435600080516020614ac08339815191529109600080516020614ac0833981519152906104c4350890600080516020614ac08339815191529108600080516020614ac083398151915290610724350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291089381600080516020614ac08339815191526107443581036107643508600080516020614ac08339815191529083099361076435600080516020614ac083398151915281810391800990600080516020614ac08339815191529108600080516020614ac0833981519152910991600080516020614ac0833981519152610704358209600080516020614ac083398151915203600080516020614ac083398151915291088161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161046435600080516020614ac083398151915203610404356103e43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161044435600080516020614ac083398151915203610404356104643561040435600080516020614ac0833981519152036103e43590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e435610464356103e435600080516020614ac0833981519152036104043590600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac083398151915261046435810360010861046435600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600308600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac083398151915290610604350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac08339815191529061060435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105e4350981600080516020614ac08339815191526104443581036104843508600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac083398151915291098161042435600080516020614ac0833981519152036103e4356104a43590600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152610584358103600408600080516020614ac0833981519152610584358103600208600080516020614ac0833981519152610584358103600108600080516020614ac083398151915290610584350990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910981600080516020614ac08339815191527f16a9e98c493a902b9502054edc03e7b22b7eac34345961bc8abced6bd147c8be6104443509600080516020614ac08339815191527f0fc1c9394db89bb2601abc49fdad4f038ce5169030a2ad69763f7875036bcb02610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104e435610524356104043590600080516020614ac08339815191529108600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614b00833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105c4350981600080516020614ac08339815191527f1eb9e1dc19a33a624c9862a1d97d1510bd521ead5dfe0345aaf6185b1a1e60fe6104443509600080516020614ac08339815191527f13abec390ada7f4370819ab1c7846f210554569d9b29d1ea8dbebd0fa8c53e66610424350990600080516020614ac08339815191529108600080516020614ac0833981519152036104c435610524356104043590600080516020614ac08339815191529108600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac083398151915291086104c435600080516020614ac0833981519152610524356104043508600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152600080516020614aa0833981519152610464350990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161046435600080516020614ac083398151915203610504356103e43590600080516020614ac08339815191529108600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529108600080516020614ac0833981519152906105c435098161044435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614ae0833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b00833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a435098161042435600080516020614ac083398151915203610524356104043590600080516020614ac08339815191529108600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac08339815191529109600080516020614ac0833981519152610524356104043508600080516020614ac083398151915261052435610404350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614b20833981519152600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac08339815191529109600080516020614ac0833981519152610504356103e43508600080516020614ac0833981519152610504356103e4350890600080516020614ac0833981519152910990600080516020614ac0833981519152910990600080516020614ac08339815191529109600080516020614aa0833981519152600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529108600080516020614ac0833981519152906105a4350990600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac08339815191529109610fe0526103a4356000526103c435602052610364905b816102641061481b57826000516110005260205161102052600080516020614ac08339815191528080610e205181808061072051816107405180988188819997829896839709610420528061040052828282096103e0520909090909096103c052610e80516104406103c0905b6104c081106147f757836104605161048051906104a05180600080516020614ac083398151915284840990600080516020614ac083398151915291096104c0526104405191826104e0528260005281600080516020614ac083398151915282850990600080516020614ac08339815191529109610500528061052052600080516020614ac083398151915281840961054052600080516020614ac0833981519152828409610560526103e0519161040051938161042051918483600080516020614ac083398151915203600080516020614ac0833981519152908808600080516020614ac0833981519152898103890890600080516020614ac0833981519152910990600080516020614ac0833981519152910960205287600080516020614ac08339815191528481038908600080516020614ac08339815191528881038a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960405281600080516020614ac08339815191528881038508600080516020614ac0833981519152888103860890600080516020614ac0833981519152910990600080516020614ac08339815191529109606052600080516020614ac0833981519152886001096080526103c05190600080516020614ac08339815191528481038308600080516020614ac0833981519152898103840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960a052600080516020614ac0833981519152038783600080516020614ac083398151915203600080516020614ac0833981519152908908600080516020614ac0833981519152838a0890600080516020614ac0833981519152910990600080516020614ac0833981519152910960c052600080516020614ac0833981519152878103840890600080516020614ac083398151915290840890600080516020614ac0833981519152910990600080516020614ac0833981519152910960e05285600080516020614ac0833981519152828103870890600080516020614ac083398151915291096101005284600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961012052600080516020614ac0833981519152838103830890600080516020614ac0833981519152910961014052600080516020614ac083398151915203600080516020614ac0833981519152910890600080516020614ac0833981519152910961016052613fff9061023c565b600051806104e0526105005b61058081106147d957610e40516020516040516060518693600080516020614ac083398151915280610424358409818681868187818b81806103e43583099781808080806104a43586099a610444359009956104043590099261048435900960000808080908080861058052608051600080516020614ac083398151915280610fe05183098184818061062435870960000809086106e45b80610624106147b457506106045b806104a41061478f575061050051908380600080516020614ac083398151915261046435860992600080516020614ac083398151915261082435870991600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac083398151915291096105a05260a05160c05160e051926105205161072435600080516020614ac0833981519152908609600080516020614ac0833981519152610704358509600080516020614ac0833981519152610744358709600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105c05261010051956101205195610540519061078435600080516020614ac083398151915290890990600080516020614ac0833981519152610764358b0990600080516020614ac08339815191526107c4358b09600080516020614ac08339815191526107a4358d09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910990600080516020614ac0833981519152910890600080516020614ac0833981519152910890600080516020614ac083398151915291096105e05261014051986101605198610560516107e435600080516020614ac0833981519152908c09600080516020614ac0833981519152610804358e09600080516020614ac08339815191529060000890600080516020614ac0833981519152910890600080516020614ac0833981519152910961060052600080516020614ac0833981519152910890600080516020614ac083398151915291086106205261064052600080516020614ac0833981519152910890600080516020614ac0833981519152910861066052600080516020614ac0833981519152910861068052600080516020614ac083398151915291086106a05261062060005b60a0811061477f576143c483610320565b600080516020614ac08339815191526106005160805109610e6051919060606105e05b60a08210614754578461444c61443d61442561441888886110405260a43560005260c435602052610e405190610419565b6084359060643590610402565b610264356080526102843560a052610e405190610442565b6110205190611000519061042c565b610d605b80610a201061472a5761467861461961453c6145f161453c6145c961453c89600080516020614ac0833981519152806145a861453c61459b61458c8f61456c61453c8761454961453c8c8361452f6145216144db6145126144db6145036144db6144f4889f6144e56144db6144cc6144db93610e405190610442565b6109c051906109a0519061042c565b610e405190610442565b6109805190610960519061042c565b610a405190610a20519061042c565b610a0051906109e0519061042c565b6101843590610164359061042c565b610104359060e4359061042c565b9161050051900990610442565b60a0519060805190610402565b9a610e60519009996101a4356080526101c43560a05283610520518c0990610442565b97610e6051900996610224356080526102443560a052610e405190610442565b61020435906101e4359061042c565b8361054051870990610442565b92610e60519009610124356080526101443560a05261056051900990610442565b610820516080526108405160a05261104051600080516020614ac08339815191520390610442565b610844356080526108643560a0526104c051600080516020614ac08339815191520390610442565b610884358060805261463a61453c6108a435938460a052610e805190610442565b906000519161106091838352602051611080948186526110a0968388526110c0938185526107a05161468d575b505050505193519251915190610455565b1561468857600160005260206000f35b600080fd5b9161470b9391614716959693610ea051600052610ec051602052610ee0938451604052610f0093845160605260805260a05260c05260e0526146f36146e8600080516020614ac0833981519152610100600020068095610419565b895190895190610402565b91600051885260205189525160005251602052610419565b825190865190610402565b906000518552602051815286808080614667565b9061473c61474a91610e405190610442565b60208301519083519061042c565b90603f1901614450565b9091600080516020614ac083398151915290818681855187510992090891601f1990810191016143e7565b81518152602091820191016143b3565b90600080516020614ac0833981519152908185818535870992090890601f19016140b1565b90600080516020614ac0833981519152908185818535870992090890601f19016140a3565b80600080516020614ac083398151915283602093510981520161400b565b60208091600080516020614ac0833981519152845181038608815201910190613c56565b909161482a8261483892610419565b602084013590843590610402565b91603f190190613be9565b9091946020600080516020614ac0833981519152819281893586510990089601929101610da9565b9190600080516020614ac083398151915260209183519008910191610d8e565b600080516020614ac0833981519152838282806020958751098809855209910190610d7a565b60209087600080516020614ac083398151915291828181038608865209920191610d0d565b610f4001935086610d07565b9092600080516020614ac08339815191528160019209930190610ce0565b90506107e0519061080051916107c05160051b806108e401918235926108e48260051b840101356108e48360061b85010135906108e460038560051b02860101359588965b846108e48760051b89010181101561499957906020808c93019384358b1b0194818960051b890101358b1b0195818960061b890101358b1b019660038960051b02010135891b019701969392919093614945565b50979450975093509350507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790816003818087800987090882868009149180600381808a80098a09089084800914161693610ea052610ec052610ee052610f005281610cca565b9160208181923595600080516020614ac083398151915287101695875201940191939193610c81565b92614a33926100af565b9092610c68565b9291614a45926100af565b9192909190610c4f565b939291614a5b926100af565b929391929091610c2b565b9091614a71926100af565b919091610bfb565b9060208091600080516020614ac083398151915284351016928035855201920191610bed56fe066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c80cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff92b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e809226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2a2646970667358221220a0e58ae7dd3fb0f443e0d062395c088c727c1d4c080852f27a12ca461cdb486d64736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/generated/inclusion_verifier.rs b/backend/src/contracts/generated/inclusion_verifier.rs index d21ec2d..00061bf 100644 --- a/backend/src/contracts/generated/inclusion_verifier.rs +++ b/backend/src/contracts/generated/inclusion_verifier.rs @@ -1259,37 +1259,37 @@ pub mod inclusion_verifier { 1, 127, 16, - 30, - 50, - 32, - 159, - 188, - 42, - 253, - 218, - 46, - 171, - 8, - 238, - 211, - 227, - 233, - 50, - 62, - 205, - 146, - 229, - 198, - 185, - 80, - 130, - 4, - 185, - 72, - 222, - 26, - 229, - 243, + 242, + 139, + 199, + 16, + 168, + 189, + 208, + 13, + 215, + 1, + 223, + 47, + 95, + 196, + 245, + 204, + 219, + 38, + 2, + 56, + 235, + 166, + 248, + 25, + 219, + 105, + 47, + 121, + 220, + 61, + 201, 97, 6, 192, @@ -1789,297 +1789,297 @@ pub mod inclusion_verifier { 64, 82, 127, - 23, - 231, - 203, - 106, - 48, - 196, - 206, - 154, - 61, - 141, - 230, - 4, - 219, - 175, - 81, - 123, - 31, - 35, - 228, - 64, + 1, + 9, + 32, + 163, + 71, + 24, + 103, + 33, + 109, + 201, + 221, + 107, + 71, + 140, + 22, + 132, + 47, + 181, 172, - 185, - 231, + 164, 52, - 89, + 254, + 108, + 155, + 241, + 98, + 44, + 74, + 189, + 112, 56, - 255, - 91, - 36, - 90, - 64, - 62, + 26, 97, 9, 96, 82, 127, - 28, - 49, - 164, - 45, - 125, - 163, - 96, - 204, - 232, - 38, - 46, - 33, - 251, - 154, - 94, + 48, + 14, + 48, + 147, + 15, + 26, + 5, + 37, + 59, + 40, + 182, + 177, + 57, 242, - 106, - 35, - 235, - 188, - 246, - 153, - 92, - 202, - 184, - 154, - 238, - 64, - 12, - 46, - 153, - 75, + 195, + 128, + 37, + 217, + 155, + 122, + 84, + 230, + 65, + 241, + 214, + 255, + 39, + 151, + 209, + 19, + 193, + 24, 97, 9, 128, 82, 127, 5, - 89, - 28, - 127, - 170, - 44, - 158, - 175, - 28, - 149, - 115, - 168, - 75, - 221, - 236, - 48, - 50, - 25, + 231, + 137, + 151, + 80, + 247, 171, - 244, - 150, - 175, - 8, - 153, - 237, - 67, - 136, + 234, + 229, + 209, + 156, + 22, + 102, + 108, + 71, + 97, + 143, + 206, + 129, + 3, + 38, + 177, + 37, + 210, 83, - 34, + 221, + 65, + 251, + 129, 125, - 208, - 86, + 214, + 90, 97, 9, 160, 82, 127, - 44, + 30, + 14, + 57, + 156, + 228, + 111, + 32, + 138, + 179, + 244, + 58, + 173, + 2, + 34, + 244, + 221, + 55, + 184, + 50, + 123, + 159, + 122, + 255, 250, + 156, + 249, + 238, + 33, + 78, 36, - 253, - 229, - 118, - 117, - 11, - 64, - 54, - 223, - 254, - 64, - 16, - 94, - 107, - 114, - 68, - 246, - 56, - 67, - 236, - 116, - 217, - 208, - 170, - 212, - 139, - 164, - 19, - 40, - 124, + 96, + 221, 97, 9, 192, 82, 127, - 41, - 155, - 18, - 230, - 83, + 34, + 39, + 78, + 78, + 253, + 65, + 151, + 221, + 101, + 21, 153, - 220, - 234, - 63, - 30, - 12, - 224, 70, - 207, - 95, - 147, - 206, - 123, - 169, - 247, - 121, - 191, - 163, - 158, - 127, - 12, - 109, - 76, - 25, - 98, - 138, - 144, + 82, + 213, + 190, + 175, + 204, + 122, + 249, + 67, + 19, + 211, + 62, + 4, + 156, + 245, + 161, + 228, + 100, + 181, + 35, + 149, 97, 9, 224, 82, 127, - 33, - 197, - 119, - 18, - 42, - 61, - 31, - 77, - 1, - 155, - 147, - 231, - 36, - 217, - 129, - 176, - 101, - 62, - 217, - 79, - 73, - 46, - 175, - 236, - 80, - 148, - 82, - 49, - 147, - 95, - 154, - 149, + 14, + 187, + 71, + 14, + 25, + 64, + 159, + 205, + 132, + 192, + 53, + 140, + 4, + 48, + 13, + 195, + 140, + 186, + 2, + 64, + 20, + 29, + 222, + 184, + 153, + 173, + 156, + 202, + 144, + 22, + 122, + 100, 97, 10, 0, 82, 127, - 25, - 217, - 34, - 1, - 65, - 190, - 242, - 89, - 33, - 212, - 116, - 198, - 230, - 52, - 208, - 109, - 251, - 125, - 121, - 4, - 229, - 154, - 78, - 196, - 134, - 161, - 72, - 176, - 11, - 253, - 56, - 163, + 22, + 43, + 175, + 98, + 69, + 226, + 206, + 197, + 155, + 201, + 59, + 194, + 48, + 37, + 39, + 210, + 153, + 205, + 181, + 14, + 16, + 15, + 20, + 137, + 95, + 23, + 15, + 49, + 106, + 42, + 38, + 67, 97, 10, 32, 82, 127, - 47, - 56, - 81, - 30, - 83, - 104, - 128, - 86, - 182, - 147, - 200, - 78, - 246, - 154, - 122, - 226, - 185, - 171, - 72, - 41, - 6, - 220, - 70, - 174, - 157, - 149, - 34, - 253, - 60, + 23, + 42, + 111, + 24, + 62, + 45, + 220, + 6, + 7, + 210, + 63, + 211, + 218, + 244, + 178, + 49, + 16, + 184, + 29, + 138, + 157, + 10, + 78, + 141, + 61, + 7, + 186, + 36, + 160, + 7, 224, - 152, - 182, + 75, 97, 10, 64, @@ -2159,149 +2159,149 @@ pub mod inclusion_verifier { 128, 82, 127, - 25, - 32, - 107, - 235, - 197, - 204, - 74, - 91, - 105, - 44, - 88, - 188, - 97, - 231, - 174, + 1, + 2, + 26, + 81, + 56, + 65, + 36, 198, - 211, - 251, - 184, - 52, - 78, - 57, - 161, - 51, - 105, - 159, - 116, - 230, - 244, + 132, + 79, + 43, + 160, + 228, 14, - 194, - 168, + 37, + 69, + 242, + 111, + 40, + 10, + 121, + 116, + 92, + 145, + 100, + 176, + 165, + 111, + 30, + 229, + 77, + 86, 97, 10, 160, 82, 127, - 6, - 120, - 199, - 189, - 209, - 65, - 189, - 38, - 203, - 233, + 37, 51, - 111, - 93, + 96, + 123, + 166, + 241, + 83, + 160, + 18, + 106, + 132, + 80, + 163, 207, - 28, - 90, - 140, - 242, - 26, - 89, - 39, + 71, + 148, + 105, + 51, + 201, + 62, 175, - 209, - 178, - 243, - 147, - 21, - 46, - 224, - 42, - 106, - 120, + 105, + 201, + 150, + 35, + 107, + 69, + 96, + 49, + 121, + 201, + 20, 97, 10, 192, 82, 127, - 28, - 110, - 35, + 31, + 89, + 190, + 129, + 179, + 253, + 125, + 41, + 9, + 48, 67, - 51, + 13, + 32, + 76, + 26, + 134, + 105, 55, - 131, - 180, - 244, - 138, + 134, + 35, + 6, + 215, + 91, 231, - 210, - 104, - 26, - 251, - 60, - 223, - 106, - 77, - 251, - 200, - 58, - 80, - 12, - 176, - 109, - 179, - 38, - 90, - 211, + 15, + 237, + 254, + 19, 229, - 213, + 101, + 206, + 11, 97, 10, 224, 82, 127, - 26, - 61, - 131, - 109, - 67, - 37, - 255, - 48, - 20, - 76, - 30, - 32, - 56, - 164, - 212, - 2, - 95, + 5, + 147, + 28, + 83, + 28, 208, - 240, - 26, - 242, - 76, - 253, - 141, - 253, - 84, - 1, - 142, - 100, - 243, - 176, - 152, + 139, + 74, + 169, + 55, + 36, + 82, + 147, + 175, + 129, + 196, + 83, + 47, + 196, + 192, + 19, + 135, + 213, + 181, + 57, + 210, + 159, + 108, + 74, + 224, + 0, + 49, 97, 11, 0, @@ -2455,371 +2455,371 @@ pub mod inclusion_verifier { 128, 82, 127, - 9, - 227, - 48, - 50, - 69, - 227, - 176, - 10, - 202, - 137, - 78, - 159, - 186, - 61, - 81, - 132, - 255, - 55, - 57, - 198, - 100, - 227, - 99, - 242, - 5, - 212, - 47, - 238, - 227, - 39, - 182, + 42, + 171, + 165, + 70, + 205, + 217, + 150, + 158, + 240, + 174, + 204, + 133, + 178, 170, + 161, + 155, + 110, + 150, + 57, + 135, + 153, + 98, + 102, + 20, + 21, + 200, + 240, + 223, + 66, + 107, + 172, + 12, 97, 11, 160, 82, 127, - 19, - 206, - 146, - 40, - 60, + 18, + 177, + 83, + 39, + 188, + 251, + 231, + 217, + 233, + 222, + 27, 198, - 246, 72, - 189, - 218, - 134, - 24, - 45, + 186, + 59, + 223, 145, - 133, - 42, - 171, - 92, - 96, - 136, - 171, 0, - 141, - 156, - 219, - 85, - 34, - 252, - 191, - 92, - 98, - 137, + 135, + 54, + 33, + 121, + 160, + 180, + 3, + 207, + 112, + 186, + 209, + 192, + 147, + 200, 97, 11, 192, 82, 127, - 8, - 165, - 3, - 231, - 161, - 102, - 132, + 37, + 144, + 157, + 183, + 35, 168, - 25, - 145, - 219, - 252, - 94, - 200, - 76, - 159, - 75, - 15, - 122, + 2, + 31, + 254, + 8, + 140, 80, + 82, + 93, 109, - 223, 38, - 182, - 125, - 48, - 94, - 191, - 192, - 248, - 23, - 67, + 15, + 145, + 87, + 190, + 122, + 124, + 25, + 75, + 111, + 49, + 83, + 134, + 164, + 108, + 218, + 184, 97, 11, 224, 82, 127, - 8, - 162, - 216, - 225, + 37, + 203, + 234, + 232, + 236, + 42, + 138, + 47, + 116, + 132, + 79, + 94, + 50, 118, - 15, - 251, - 22, - 247, - 1, - 71, - 248, - 180, - 78, - 120, - 28, 237, - 101, - 161, - 230, - 119, - 167, - 134, - 205, - 216, - 188, - 159, 148, - 123, - 54, - 19, - 28, + 7, + 153, + 7, + 190, + 214, + 215, + 177, + 178, + 110, + 214, + 149, + 50, + 143, + 231, + 188, + 174, 97, 12, 0, 82, 127, - 37, - 99, - 43, - 200, - 1, - 44, - 108, - 188, - 109, + 38, + 191, + 253, + 38, 221, - 166, - 97, - 169, - 114, - 159, - 84, - 76, - 84, - 98, - 7, - 0, - 195, - 132, - 12, - 1, - 202, - 91, - 87, - 230, - 26, + 143, + 95, + 118, + 121, + 40, 31, - 254, + 141, + 26, + 67, + 38, + 144, + 224, + 123, + 21, + 203, + 223, + 104, + 79, + 228, + 86, + 170, + 18, + 119, + 81, + 94, + 23, + 48, 97, 12, 32, 82, 127, - 43, - 165, - 118, - 76, - 102, - 58, - 75, - 40, - 146, - 52, - 60, - 48, - 61, - 160, - 245, - 102, - 78, + 1, + 90, 63, - 98, - 13, + 9, + 200, + 42, + 119, + 10, + 105, 214, - 184, - 81, - 167, - 17, - 120, - 23, + 117, + 131, + 215, 4, - 41, - 47, - 209, - 26, + 157, + 131, + 214, + 155, + 123, + 142, + 3, + 211, + 132, + 132, + 73, + 114, + 21, + 205, + 197, + 151, + 149, + 86, 97, 12, 64, 82, 127, - 7, - 207, - 228, - 243, - 21, - 43, - 25, - 150, - 232, - 234, - 253, - 113, - 132, - 81, - 53, - 108, - 32, - 68, + 30, 228, - 194, + 36, + 30, + 145, + 172, 57, - 252, - 194, - 158, - 179, - 168, - 29, + 23, + 86, + 176, + 185, + 137, + 58, + 193, + 227, + 78, + 169, + 92, + 109, + 214, + 137, + 231, + 220, + 161, + 44, + 98, + 166, + 206, + 148, 57, - 46, - 27, - 68, - 173, + 96, + 241, 97, 12, 96, 82, 127, - 37, - 86, - 115, - 226, - 36, - 165, - 148, - 229, - 63, - 213, - 177, - 180, + 16, + 173, + 117, + 241, + 153, + 191, + 31, + 185, + 51, + 91, + 145, + 194, + 13, + 182, + 205, + 137, + 88, 220, - 212, - 99, - 41, - 231, - 42, - 4, - 225, - 96, - 86, - 222, - 163, - 213, - 161, + 178, + 254, + 17, + 152, + 59, + 199, + 124, + 219, + 64, + 54, + 229, 126, - 49, - 41, - 26, - 153, - 96, + 89, + 202, 97, 12, 128, 82, 127, - 19, - 108, - 177, - 75, - 53, - 31, - 59, - 67, - 181, - 230, - 24, - 197, - 196, - 144, - 34, - 88, - 142, - 221, - 72, - 85, - 15, - 78, - 125, - 105, - 48, - 148, - 66, - 232, - 184, - 61, + 5, + 235, + 93, + 25, + 229, + 137, + 193, + 30, + 11, + 178, + 32, 13, - 34, + 102, + 218, + 130, + 153, + 85, + 84, + 84, + 129, + 136, + 92, + 251, + 201, + 9, + 158, + 198, + 165, + 62, + 38, + 110, + 210, 97, 12, 160, 82, 127, - 14, - 233, - 187, - 223, + 37, + 172, + 29, + 152, + 73, + 249, + 244, + 72, 206, - 147, + 204, + 126, + 173, + 125, + 72, + 103, + 15, + 102, + 187, + 254, + 125, + 248, + 226, + 72, + 189, 129, - 94, - 121, - 170, - 191, - 197, - 236, - 146, - 165, - 35, - 70, - 196, - 106, - 69, - 225, - 123, - 197, - 188, - 154, - 216, - 21, - 94, - 152, - 44, - 156, - 172, + 138, + 149, + 77, + 246, + 147, + 108, + 39, 97, 12, 192, @@ -2899,149 +2899,149 @@ pub mod inclusion_verifier { 0, 82, 127, - 31, - 93, - 105, - 248, - 173, - 199, - 222, - 243, - 83, - 202, + 27, + 149, 197, - 48, - 19, - 49, - 246, - 106, - 106, - 161, - 44, - 59, 220, - 70, - 186, - 133, + 155, + 174, + 15, + 179, + 248, + 32, + 134, + 132, + 4, + 46, + 87, + 224, + 252, + 251, + 195, + 119, + 74, + 249, + 174, 9, - 216, - 28, - 25, - 34, - 148, - 76, - 30, + 3, + 171, + 158, + 157, + 219, + 79, + 137, + 253, 97, 13, 32, 82, 127, - 5, - 10, - 53, - 140, - 142, - 231, - 73, - 1, - 175, + 30, + 133, + 100, + 224, + 20, + 25, + 113, + 55, + 57, + 135, + 18, + 36, + 206, + 21, + 244, + 196, + 181, + 30, + 106, + 241, + 97, 214, - 190, - 189, - 218, + 224, + 122, + 23, + 142, + 101, + 69, + 135, + 144, 53, - 162, - 91, - 233, - 155, - 166, - 49, - 35, - 42, - 190, - 192, - 187, - 125, - 242, - 52, - 40, - 226, - 25, - 235, + 191, 97, 13, 64, 82, 127, - 29, - 219, - 249, 28, - 238, - 237, - 136, - 168, - 198, - 110, - 155, - 248, - 208, + 239, + 200, 137, - 179, - 9, + 99, + 156, + 249, + 143, + 148, + 216, + 49, + 234, + 65, + 195, + 86, + 146, + 159, + 147, + 23, + 119, 141, - 192, - 131, - 241, - 87, - 144, - 135, - 7, - 150, - 167, - 38, - 127, - 37, - 207, - 155, - 240, + 218, + 5, + 186, + 12, + 88, + 133, + 64, + 22, + 56, + 219, + 103, 97, 13, 96, 82, 127, - 10, - 180, - 232, - 11, - 0, - 145, - 205, - 64, - 7, - 2, - 148, - 247, - 84, - 229, - 75, + 30, + 4, + 102, + 222, + 178, + 42, + 134, + 217, 18, - 126, - 32, - 0, - 87, - 44, - 3, + 43, + 199, + 24, + 11, + 125, + 41, + 62, + 71, + 40, + 130, 68, - 194, - 131, - 138, - 238, - 175, - 37, - 30, - 179, - 145, + 171, + 241, + 69, + 10, + 92, + 214, + 58, + 50, + 137, + 164, + 87, + 202, 97, 13, 128, @@ -3062,37 +3062,37 @@ pub mod inclusion_verifier { 22, 127, 16, - 30, - 50, - 32, - 159, - 188, - 42, - 253, - 218, - 46, - 171, - 8, - 238, - 211, - 227, - 233, - 50, - 62, - 205, - 146, - 229, - 198, - 185, - 80, - 130, - 4, - 185, - 72, - 222, - 26, - 229, - 243, + 242, + 139, + 199, + 16, + 168, + 189, + 208, + 13, + 215, + 1, + 223, + 47, + 95, + 196, + 245, + 204, + 219, + 38, + 2, + 56, + 235, + 166, + 248, + 25, + 219, + 105, + 47, + 121, + 220, + 61, + 201, 96, 0, 82, @@ -19355,38 +19355,38 @@ pub mod inclusion_verifier { 34, 18, 32, - 57, - 49, - 11, - 184, - 227, - 29, - 60, + 160, + 229, + 138, + 231, + 221, 63, - 146, - 29, - 103, - 96, - 75, - 43, - 55, - 233, + 176, + 244, + 67, + 224, + 208, + 98, + 57, + 92, + 8, + 140, 114, - 203, - 179, - 129, - 209, - 112, - 142, - 54, - 68, - 127, + 124, + 29, 76, - 139, - 39, - 211, - 33, - 215, + 8, + 8, + 82, + 242, + 122, + 18, + 202, + 70, + 28, + 219, + 72, + 109, 100, 115, 111, @@ -20615,37 +20615,37 @@ pub mod inclusion_verifier { 1, 127, 16, - 30, - 50, - 32, - 159, - 188, - 42, - 253, - 218, - 46, - 171, - 8, - 238, - 211, - 227, - 233, - 50, - 62, - 205, - 146, - 229, - 198, - 185, - 80, - 130, - 4, - 185, - 72, - 222, - 26, - 229, - 243, + 242, + 139, + 199, + 16, + 168, + 189, + 208, + 13, + 215, + 1, + 223, + 47, + 95, + 196, + 245, + 204, + 219, + 38, + 2, + 56, + 235, + 166, + 248, + 25, + 219, + 105, + 47, + 121, + 220, + 61, + 201, 97, 6, 192, @@ -21145,297 +21145,297 @@ pub mod inclusion_verifier { 64, 82, 127, - 23, - 231, - 203, - 106, - 48, - 196, - 206, - 154, - 61, - 141, - 230, - 4, - 219, - 175, - 81, - 123, - 31, - 35, - 228, - 64, + 1, + 9, + 32, + 163, + 71, + 24, + 103, + 33, + 109, + 201, + 221, + 107, + 71, + 140, + 22, + 132, + 47, + 181, 172, - 185, - 231, + 164, 52, - 89, + 254, + 108, + 155, + 241, + 98, + 44, + 74, + 189, + 112, 56, - 255, - 91, - 36, - 90, - 64, - 62, + 26, 97, 9, 96, 82, 127, - 28, - 49, - 164, - 45, - 125, - 163, - 96, - 204, - 232, - 38, - 46, - 33, - 251, - 154, - 94, + 48, + 14, + 48, + 147, + 15, + 26, + 5, + 37, + 59, + 40, + 182, + 177, + 57, 242, - 106, - 35, - 235, - 188, - 246, - 153, - 92, - 202, - 184, - 154, - 238, - 64, - 12, - 46, - 153, - 75, + 195, + 128, + 37, + 217, + 155, + 122, + 84, + 230, + 65, + 241, + 214, + 255, + 39, + 151, + 209, + 19, + 193, + 24, 97, 9, 128, 82, 127, 5, - 89, - 28, - 127, - 170, - 44, - 158, - 175, - 28, - 149, - 115, - 168, - 75, - 221, - 236, - 48, - 50, - 25, + 231, + 137, + 151, + 80, + 247, 171, - 244, - 150, - 175, - 8, - 153, - 237, - 67, - 136, + 234, + 229, + 209, + 156, + 22, + 102, + 108, + 71, + 97, + 143, + 206, + 129, + 3, + 38, + 177, + 37, + 210, 83, - 34, + 221, + 65, + 251, + 129, 125, - 208, - 86, + 214, + 90, 97, 9, 160, 82, 127, - 44, + 30, + 14, + 57, + 156, + 228, + 111, + 32, + 138, + 179, + 244, + 58, + 173, + 2, + 34, + 244, + 221, + 55, + 184, + 50, + 123, + 159, + 122, + 255, 250, + 156, + 249, + 238, + 33, + 78, 36, - 253, - 229, - 118, - 117, - 11, - 64, - 54, - 223, - 254, - 64, - 16, - 94, - 107, - 114, - 68, - 246, - 56, - 67, - 236, - 116, - 217, - 208, - 170, - 212, - 139, - 164, - 19, - 40, - 124, + 96, + 221, 97, 9, 192, 82, 127, - 41, - 155, - 18, - 230, - 83, + 34, + 39, + 78, + 78, + 253, + 65, + 151, + 221, + 101, + 21, 153, - 220, - 234, - 63, - 30, - 12, - 224, 70, - 207, - 95, - 147, - 206, - 123, - 169, - 247, - 121, - 191, - 163, - 158, - 127, - 12, - 109, - 76, - 25, - 98, - 138, - 144, + 82, + 213, + 190, + 175, + 204, + 122, + 249, + 67, + 19, + 211, + 62, + 4, + 156, + 245, + 161, + 228, + 100, + 181, + 35, + 149, 97, 9, 224, 82, 127, - 33, - 197, - 119, - 18, - 42, - 61, - 31, - 77, - 1, - 155, - 147, - 231, - 36, - 217, - 129, - 176, - 101, - 62, - 217, - 79, - 73, - 46, - 175, - 236, - 80, - 148, - 82, - 49, - 147, - 95, - 154, - 149, + 14, + 187, + 71, + 14, + 25, + 64, + 159, + 205, + 132, + 192, + 53, + 140, + 4, + 48, + 13, + 195, + 140, + 186, + 2, + 64, + 20, + 29, + 222, + 184, + 153, + 173, + 156, + 202, + 144, + 22, + 122, + 100, 97, 10, 0, 82, 127, - 25, - 217, - 34, - 1, - 65, - 190, - 242, - 89, - 33, - 212, - 116, - 198, - 230, - 52, - 208, - 109, - 251, - 125, - 121, - 4, - 229, - 154, - 78, - 196, - 134, - 161, - 72, - 176, - 11, - 253, - 56, - 163, + 22, + 43, + 175, + 98, + 69, + 226, + 206, + 197, + 155, + 201, + 59, + 194, + 48, + 37, + 39, + 210, + 153, + 205, + 181, + 14, + 16, + 15, + 20, + 137, + 95, + 23, + 15, + 49, + 106, + 42, + 38, + 67, 97, 10, 32, 82, 127, - 47, - 56, - 81, - 30, - 83, - 104, - 128, - 86, - 182, - 147, - 200, - 78, - 246, - 154, - 122, - 226, - 185, - 171, - 72, - 41, - 6, + 23, + 42, + 111, + 24, + 62, + 45, 220, - 70, - 174, + 6, + 7, + 210, + 63, + 211, + 218, + 244, + 178, + 49, + 16, + 184, + 29, + 138, 157, - 149, - 34, - 253, - 60, + 10, + 78, + 141, + 61, + 7, + 186, + 36, + 160, + 7, 224, - 152, - 182, + 75, 97, 10, 64, @@ -21515,149 +21515,149 @@ pub mod inclusion_verifier { 128, 82, 127, - 25, - 32, - 107, - 235, - 197, - 204, - 74, - 91, - 105, - 44, - 88, - 188, - 97, - 231, - 174, + 1, + 2, + 26, + 81, + 56, + 65, + 36, 198, - 211, - 251, - 184, - 52, - 78, - 57, - 161, - 51, - 105, - 159, - 116, - 230, - 244, + 132, + 79, + 43, + 160, + 228, 14, - 194, - 168, + 37, + 69, + 242, + 111, + 40, + 10, + 121, + 116, + 92, + 145, + 100, + 176, + 165, + 111, + 30, + 229, + 77, + 86, 97, 10, 160, 82, 127, - 6, - 120, - 199, - 189, - 209, - 65, - 189, - 38, - 203, - 233, + 37, 51, - 111, - 93, + 96, + 123, + 166, + 241, + 83, + 160, + 18, + 106, + 132, + 80, + 163, 207, - 28, - 90, - 140, - 242, - 26, - 89, - 39, + 71, + 148, + 105, + 51, + 201, + 62, 175, - 209, - 178, - 243, - 147, - 21, - 46, - 224, - 42, - 106, - 120, + 105, + 201, + 150, + 35, + 107, + 69, + 96, + 49, + 121, + 201, + 20, 97, 10, 192, 82, 127, - 28, - 110, - 35, + 31, + 89, + 190, + 129, + 179, + 253, + 125, + 41, + 9, + 48, 67, - 51, + 13, + 32, + 76, + 26, + 134, + 105, 55, - 131, - 180, - 244, - 138, + 134, + 35, + 6, + 215, + 91, 231, - 210, - 104, - 26, - 251, - 60, - 223, - 106, - 77, - 251, - 200, - 58, - 80, - 12, - 176, - 109, - 179, - 38, - 90, - 211, + 15, + 237, + 254, + 19, 229, - 213, + 101, + 206, + 11, 97, 10, 224, 82, 127, - 26, - 61, - 131, - 109, - 67, - 37, - 255, - 48, - 20, - 76, - 30, - 32, - 56, - 164, - 212, - 2, - 95, + 5, + 147, + 28, + 83, + 28, 208, - 240, - 26, - 242, - 76, - 253, - 141, - 253, - 84, - 1, - 142, - 100, - 243, - 176, - 152, + 139, + 74, + 169, + 55, + 36, + 82, + 147, + 175, + 129, + 196, + 83, + 47, + 196, + 192, + 19, + 135, + 213, + 181, + 57, + 210, + 159, + 108, + 74, + 224, + 0, + 49, 97, 11, 0, @@ -21811,371 +21811,371 @@ pub mod inclusion_verifier { 128, 82, 127, - 9, - 227, - 48, - 50, - 69, - 227, - 176, - 10, - 202, - 137, - 78, - 159, - 186, - 61, - 81, - 132, - 255, - 55, - 57, - 198, - 100, - 227, - 99, - 242, - 5, - 212, - 47, - 238, - 227, - 39, - 182, + 42, + 171, + 165, + 70, + 205, + 217, + 150, + 158, + 240, + 174, + 204, + 133, + 178, 170, - 97, - 11, - 160, - 82, - 127, - 19, - 206, - 146, - 40, - 60, + 161, + 155, + 110, + 150, + 57, + 135, + 153, + 98, + 102, + 20, + 21, + 200, + 240, + 223, + 66, + 107, + 172, + 12, + 97, + 11, + 160, + 82, + 127, + 18, + 177, + 83, + 39, + 188, + 251, + 231, + 217, + 233, + 222, + 27, 198, - 246, 72, - 189, - 218, - 134, - 24, - 45, + 186, + 59, + 223, 145, - 133, - 42, - 171, - 92, - 96, - 136, - 171, 0, - 141, - 156, - 219, - 85, - 34, - 252, - 191, - 92, - 98, - 137, + 135, + 54, + 33, + 121, + 160, + 180, + 3, + 207, + 112, + 186, + 209, + 192, + 147, + 200, 97, 11, 192, 82, 127, - 8, - 165, - 3, - 231, - 161, - 102, - 132, + 37, + 144, + 157, + 183, + 35, 168, - 25, - 145, - 219, - 252, - 94, - 200, - 76, - 159, - 75, - 15, - 122, + 2, + 31, + 254, + 8, + 140, 80, + 82, + 93, 109, - 223, 38, - 182, - 125, - 48, - 94, - 191, - 192, - 248, - 23, - 67, + 15, + 145, + 87, + 190, + 122, + 124, + 25, + 75, + 111, + 49, + 83, + 134, + 164, + 108, + 218, + 184, 97, 11, 224, 82, 127, - 8, - 162, - 216, - 225, + 37, + 203, + 234, + 232, + 236, + 42, + 138, + 47, + 116, + 132, + 79, + 94, + 50, 118, - 15, - 251, - 22, - 247, - 1, - 71, - 248, - 180, - 78, - 120, - 28, 237, - 101, - 161, - 230, - 119, - 167, - 134, - 205, - 216, - 188, - 159, 148, - 123, - 54, - 19, - 28, + 7, + 153, + 7, + 190, + 214, + 215, + 177, + 178, + 110, + 214, + 149, + 50, + 143, + 231, + 188, + 174, 97, 12, 0, 82, 127, - 37, - 99, - 43, - 200, - 1, - 44, - 108, - 188, - 109, + 38, + 191, + 253, + 38, 221, - 166, - 97, - 169, - 114, - 159, - 84, - 76, - 84, - 98, - 7, - 0, - 195, - 132, - 12, - 1, - 202, - 91, - 87, - 230, - 26, + 143, + 95, + 118, + 121, + 40, 31, - 254, + 141, + 26, + 67, + 38, + 144, + 224, + 123, + 21, + 203, + 223, + 104, + 79, + 228, + 86, + 170, + 18, + 119, + 81, + 94, + 23, + 48, 97, 12, 32, 82, 127, - 43, - 165, - 118, - 76, - 102, - 58, - 75, - 40, - 146, - 52, - 60, - 48, - 61, - 160, - 245, - 102, - 78, + 1, + 90, 63, - 98, - 13, + 9, + 200, + 42, + 119, + 10, + 105, 214, - 184, - 81, - 167, - 17, - 120, - 23, + 117, + 131, + 215, 4, - 41, - 47, - 209, - 26, + 157, + 131, + 214, + 155, + 123, + 142, + 3, + 211, + 132, + 132, + 73, + 114, + 21, + 205, + 197, + 151, + 149, + 86, 97, 12, 64, 82, 127, - 7, - 207, - 228, - 243, - 21, - 43, - 25, - 150, - 232, - 234, - 253, - 113, - 132, - 81, - 53, - 108, - 32, - 68, + 30, 228, - 194, + 36, + 30, + 145, + 172, 57, - 252, - 194, - 158, - 179, - 168, - 29, + 23, + 86, + 176, + 185, + 137, + 58, + 193, + 227, + 78, + 169, + 92, + 109, + 214, + 137, + 231, + 220, + 161, + 44, + 98, + 166, + 206, + 148, 57, - 46, - 27, - 68, - 173, + 96, + 241, 97, 12, 96, 82, 127, - 37, - 86, - 115, - 226, - 36, - 165, - 148, - 229, - 63, - 213, - 177, - 180, + 16, + 173, + 117, + 241, + 153, + 191, + 31, + 185, + 51, + 91, + 145, + 194, + 13, + 182, + 205, + 137, + 88, 220, - 212, - 99, - 41, - 231, - 42, - 4, - 225, - 96, - 86, - 222, - 163, - 213, - 161, + 178, + 254, + 17, + 152, + 59, + 199, + 124, + 219, + 64, + 54, + 229, 126, - 49, - 41, - 26, - 153, - 96, + 89, + 202, 97, 12, 128, 82, 127, - 19, - 108, - 177, - 75, - 53, - 31, - 59, - 67, - 181, - 230, - 24, - 197, - 196, - 144, - 34, - 88, - 142, - 221, - 72, - 85, - 15, - 78, - 125, - 105, - 48, - 148, - 66, - 232, - 184, - 61, + 5, + 235, + 93, + 25, + 229, + 137, + 193, + 30, + 11, + 178, + 32, 13, - 34, + 102, + 218, + 130, + 153, + 85, + 84, + 84, + 129, + 136, + 92, + 251, + 201, + 9, + 158, + 198, + 165, + 62, + 38, + 110, + 210, 97, 12, 160, 82, 127, - 14, - 233, - 187, - 223, + 37, + 172, + 29, + 152, + 73, + 249, + 244, + 72, 206, - 147, + 204, + 126, + 173, + 125, + 72, + 103, + 15, + 102, + 187, + 254, + 125, + 248, + 226, + 72, + 189, 129, - 94, - 121, - 170, - 191, - 197, - 236, - 146, - 165, - 35, - 70, - 196, - 106, - 69, - 225, - 123, - 197, - 188, - 154, - 216, - 21, - 94, - 152, - 44, - 156, - 172, + 138, + 149, + 77, + 246, + 147, + 108, + 39, 97, 12, 192, @@ -22255,149 +22255,149 @@ pub mod inclusion_verifier { 0, 82, 127, - 31, - 93, - 105, - 248, - 173, - 199, - 222, - 243, - 83, - 202, + 27, + 149, 197, - 48, - 19, - 49, - 246, - 106, - 106, - 161, - 44, - 59, 220, - 70, - 186, - 133, + 155, + 174, + 15, + 179, + 248, + 32, + 134, + 132, + 4, + 46, + 87, + 224, + 252, + 251, + 195, + 119, + 74, + 249, + 174, 9, - 216, - 28, - 25, - 34, - 148, - 76, - 30, + 3, + 171, + 158, + 157, + 219, + 79, + 137, + 253, 97, 13, 32, 82, 127, - 5, - 10, - 53, - 140, - 142, - 231, - 73, - 1, - 175, + 30, + 133, + 100, + 224, + 20, + 25, + 113, + 55, + 57, + 135, + 18, + 36, + 206, + 21, + 244, + 196, + 181, + 30, + 106, + 241, + 97, 214, - 190, - 189, - 218, + 224, + 122, + 23, + 142, + 101, + 69, + 135, + 144, 53, - 162, - 91, - 233, - 155, - 166, - 49, - 35, - 42, - 190, - 192, - 187, - 125, - 242, - 52, - 40, - 226, - 25, - 235, + 191, 97, 13, 64, 82, 127, - 29, - 219, - 249, 28, - 238, - 237, - 136, - 168, - 198, - 110, - 155, - 248, - 208, + 239, + 200, 137, - 179, - 9, + 99, + 156, + 249, + 143, + 148, + 216, + 49, + 234, + 65, + 195, + 86, + 146, + 159, + 147, + 23, + 119, 141, - 192, - 131, - 241, - 87, - 144, - 135, - 7, - 150, - 167, - 38, - 127, - 37, - 207, - 155, - 240, + 218, + 5, + 186, + 12, + 88, + 133, + 64, + 22, + 56, + 219, + 103, 97, 13, 96, 82, 127, - 10, - 180, - 232, - 11, - 0, - 145, - 205, - 64, - 7, - 2, - 148, - 247, - 84, - 229, - 75, + 30, + 4, + 102, + 222, + 178, + 42, + 134, + 217, 18, - 126, - 32, - 0, - 87, - 44, - 3, + 43, + 199, + 24, + 11, + 125, + 41, + 62, + 71, + 40, + 130, 68, - 194, - 131, - 138, - 238, - 175, - 37, - 30, - 179, - 145, + 171, + 241, + 69, + 10, + 92, + 214, + 58, + 50, + 137, + 164, + 87, + 202, 97, 13, 128, @@ -22418,37 +22418,37 @@ pub mod inclusion_verifier { 22, 127, 16, - 30, - 50, - 32, - 159, - 188, - 42, - 253, - 218, - 46, - 171, - 8, - 238, - 211, - 227, - 233, - 50, - 62, - 205, - 146, - 229, - 198, - 185, - 80, - 130, - 4, - 185, - 72, - 222, - 26, - 229, - 243, + 242, + 139, + 199, + 16, + 168, + 189, + 208, + 13, + 215, + 1, + 223, + 47, + 95, + 196, + 245, + 204, + 219, + 38, + 2, + 56, + 235, + 166, + 248, + 25, + 219, + 105, + 47, + 121, + 220, + 61, + 201, 96, 0, 82, @@ -38711,38 +38711,38 @@ pub mod inclusion_verifier { 34, 18, 32, - 57, - 49, - 11, - 184, - 227, - 29, - 60, + 160, + 229, + 138, + 231, + 221, 63, - 146, - 29, - 103, - 96, - 75, - 43, - 55, - 233, + 176, + 244, + 67, + 224, + 208, + 98, + 57, + 92, + 8, + 140, 114, - 203, - 179, - 129, - 209, - 112, - 142, - 54, - 68, - 127, + 124, + 29, 76, - 139, - 39, - 211, - 33, - 215, + 8, + 8, + 82, + 242, + 122, + 18, + 202, + 70, + 28, + 219, + 72, + 109, 100, 115, 111, diff --git a/backend/src/tests.rs b/backend/src/tests.rs index dbf1980..8373c7c 100644 --- a/backend/src/tests.rs +++ b/backend/src/tests.rs @@ -76,7 +76,7 @@ pub async fn initialize_test_env( //The number of cryptocurrencies supported by the Merkle sum tree let currencies_count = 2; // The number of bytes used to represent the balance of a cryptocurrency in the Merkle sum tree - let balance_byte_range = 14; + let balance_byte_range = 8; let args: &[Token] = &[ Token::Address(inclusion_verifier_contract.address()), @@ -93,7 +93,6 @@ pub async fn initialize_test_env( time::sleep(Duration::from_secs(3)).await; - (anvil, cex_addr_1, cex_addr_2, client, summa_contract) } @@ -162,8 +161,8 @@ mod test { let mst = MerkleSumTree::from_csv(entry_csv).unwrap(); let mut round_one = - Round::<4, 2, 14>::new(&signer, Box::new(mst.clone()), params_path, 1).unwrap(); - let mut round_two = Round::<4, 2, 14>::new(&signer, Box::new(mst), params_path, 2).unwrap(); + Round::<4, 2, 8>::new(&signer, Box::new(mst.clone()), params_path, 1).unwrap(); + let mut round_two = Round::<4, 2, 8>::new(&signer, Box::new(mst), params_path, 2).unwrap(); // Checking block number before sending transaction of liability commitment let outer_provider: Provider = Provider::try_from(anvil.endpoint().as_str())?; @@ -240,7 +239,7 @@ mod test { let entry_csv = "../csv/entry_16.csv"; let mst = MerkleSumTree::from_csv(entry_csv).unwrap(); - let mut round = Round::<4, 2, 14>::new(&signer, Box::new(mst), params_path, 1).unwrap(); + let mut round = Round::<4, 2, 8>::new(&signer, Box::new(mst), params_path, 1).unwrap(); let mut liability_commitment_logs = summa_contract .liabilities_commitment_submitted_filter() diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts index 969517a..56bfacf 100644 --- a/contracts/scripts/deploy.ts +++ b/contracts/scripts/deploy.ts @@ -20,7 +20,7 @@ async function main() { //The number of cryptocurrencies supported by the Merkle sum tree const currenciesCount = 2; // The number of bytes used to represent the balance of a cryptocurrency in the Merkle sum tree - const balanceByteRange = 14; + const balanceByteRange = 8; const summa = await ethers.deployContract("Summa", [ inclusionVerifier.address, mstLevels, diff --git a/contracts/src/InclusionVerifier.sol b/contracts/src/InclusionVerifier.sol index 5e1033b..7016ec8 100644 --- a/contracts/src/InclusionVerifier.sol +++ b/contracts/src/InclusionVerifier.sol @@ -214,7 +214,7 @@ contract Verifier { { // Load vk into memory - mstore(0x06c0, 0x101e32209fbc2afdda2eab08eed3e3e9323ecd92e5c6b9508204b948de1ae5f3) // vk_digest + mstore(0x06c0, 0x10f28bc710a8bdd00dd701df2f5fc4f5ccdb260238eba6f819db692f79dc3dc9) // vk_digest mstore(0x06e0, 0x000000000000000000000000000000000000000000000000000000000000000b) // k mstore(0x0700, 0x305e41e912d579f5b3193badcab128321c8ee1cb70aa396331b979553d820001) // n_inv mstore(0x0720, 0x14c60185e75885d674db4b3f7d4a5694fa6c01aa0f53557b060bc04a4172705f) // omega @@ -235,40 +235,40 @@ contract Verifier { mstore(0x0900, 0x30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e) // neg_s_g2_x_2 mstore(0x0920, 0x16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145) // neg_s_g2_y_1 mstore(0x0940, 0x2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff) // neg_s_g2_y_2 - mstore(0x0960, 0x17e7cb6a30c4ce9a3d8de604dbaf517b1f23e440acb9e7345938ff5b245a403e) // fixed_comms[0].x - mstore(0x0980, 0x1c31a42d7da360cce8262e21fb9a5ef26a23ebbcf6995ccab89aee400c2e994b) // fixed_comms[0].y - mstore(0x09a0, 0x05591c7faa2c9eaf1c9573a84bddec303219abf496af0899ed438853227dd056) // fixed_comms[1].x - mstore(0x09c0, 0x2cfa24fde576750b4036dffe40105e6b7244f63843ec74d9d0aad48ba413287c) // fixed_comms[1].y - mstore(0x09e0, 0x299b12e65399dcea3f1e0ce046cf5f93ce7ba9f779bfa39e7f0c6d4c19628a90) // fixed_comms[2].x - mstore(0x0a00, 0x21c577122a3d1f4d019b93e724d981b0653ed94f492eafec50945231935f9a95) // fixed_comms[2].y - mstore(0x0a20, 0x19d9220141bef25921d474c6e634d06dfb7d7904e59a4ec486a148b00bfd38a3) // fixed_comms[3].x - mstore(0x0a40, 0x2f38511e53688056b693c84ef69a7ae2b9ab482906dc46ae9d9522fd3ce098b6) // fixed_comms[3].y + mstore(0x0960, 0x010920a3471867216dc9dd6b478c16842fb5aca434fe6c9bf1622c4abd70381a) // fixed_comms[0].x + mstore(0x0980, 0x300e30930f1a05253b28b6b139f2c38025d99b7a54e641f1d6ff2797d113c118) // fixed_comms[0].y + mstore(0x09a0, 0x05e7899750f7abeae5d19c16666c47618fce810326b125d253dd41fb817dd65a) // fixed_comms[1].x + mstore(0x09c0, 0x1e0e399ce46f208ab3f43aad0222f4dd37b8327b9f7afffa9cf9ee214e2460dd) // fixed_comms[1].y + mstore(0x09e0, 0x22274e4efd4197dd6515994652d5beafcc7af94313d33e049cf5a1e464b52395) // fixed_comms[2].x + mstore(0x0a00, 0x0ebb470e19409fcd84c0358c04300dc38cba0240141ddeb899ad9cca90167a64) // fixed_comms[2].y + mstore(0x0a20, 0x162baf6245e2cec59bc93bc2302527d299cdb50e100f14895f170f316a2a2643) // fixed_comms[3].x + mstore(0x0a40, 0x172a6f183e2ddc0607d23fd3daf4b23110b81d8a9d0a4e8d3d07ba24a007e04b) // fixed_comms[3].y mstore(0x0a60, 0x22e1cdbfffcfcf4f18cf4342edf1fb26c3b6e52ace3d5fadcf5cc2614333baa4) // fixed_comms[4].x mstore(0x0a80, 0x0e28df72dcc69cc6442d72f693661997480a913ac353890efd63a873959727c0) // fixed_comms[4].y - mstore(0x0aa0, 0x19206bebc5cc4a5b692c58bc61e7aec6d3fbb8344e39a133699f74e6f40ec2a8) // fixed_comms[5].x - mstore(0x0ac0, 0x0678c7bdd141bd26cbe9336f5dcf1c5a8cf21a5927afd1b2f393152ee02a6a78) // fixed_comms[5].y - mstore(0x0ae0, 0x1c6e2343333783b4f48ae7d2681afb3cdf6a4dfbc83a500cb06db3265ad3e5d5) // fixed_comms[6].x - mstore(0x0b00, 0x1a3d836d4325ff30144c1e2038a4d4025fd0f01af24cfd8dfd54018e64f3b098) // fixed_comms[6].y + mstore(0x0aa0, 0x01021a51384124c6844f2ba0e40e2545f26f280a79745c9164b0a56f1ee54d56) // fixed_comms[5].x + mstore(0x0ac0, 0x2533607ba6f153a0126a8450a3cf47946933c93eaf69c996236b45603179c914) // fixed_comms[5].y + mstore(0x0ae0, 0x1f59be81b3fd7d290930430d204c1a866937862306d75be70fedfe13e565ce0b) // fixed_comms[6].x + mstore(0x0b00, 0x05931c531cd08b4aa937245293af81c4532fc4c01387d5b539d29f6c4ae00031) // fixed_comms[6].y mstore(0x0b20, 0x203b21a648fbfb96459640bbc5b41852dd1efc1209c89b635ba638dcb929da6b) // fixed_comms[7].x mstore(0x0b40, 0x04e7002f06f2091a44afcd311e93c22f46dd9f3207b5bcc34f0ca7652098f097) // fixed_comms[7].y mstore(0x0b60, 0x20ab7490b42f3f7b2b0bbe601a09d72ee93f924801d597f48cf2d443751d5f91) // fixed_comms[8].x mstore(0x0b80, 0x2bca2f1762946a05fb1632550c6cb12c02d18d9bee5bdd4212ca7342888720fd) // fixed_comms[8].y - mstore(0x0ba0, 0x09e3303245e3b00aca894e9fba3d5184ff3739c664e363f205d42feee327b6aa) // fixed_comms[9].x - mstore(0x0bc0, 0x13ce92283cc6f648bdda86182d91852aab5c6088ab008d9cdb5522fcbf5c6289) // fixed_comms[9].y - mstore(0x0be0, 0x08a503e7a16684a81991dbfc5ec84c9f4b0f7a506ddf26b67d305ebfc0f81743) // fixed_comms[10].x - mstore(0x0c00, 0x08a2d8e1760ffb16f70147f8b44e781ced65a1e677a786cdd8bc9f947b36131c) // fixed_comms[10].y - mstore(0x0c20, 0x25632bc8012c6cbc6ddda661a9729f544c54620700c3840c01ca5b57e61a1ffe) // permutation_comms[0].x - mstore(0x0c40, 0x2ba5764c663a4b2892343c303da0f5664e3f620dd6b851a711781704292fd11a) // permutation_comms[0].y - mstore(0x0c60, 0x07cfe4f3152b1996e8eafd718451356c2044e4c239fcc29eb3a81d392e1b44ad) // permutation_comms[1].x - mstore(0x0c80, 0x255673e224a594e53fd5b1b4dcd46329e72a04e16056dea3d5a17e31291a9960) // permutation_comms[1].y - mstore(0x0ca0, 0x136cb14b351f3b43b5e618c5c49022588edd48550f4e7d69309442e8b83d0d22) // permutation_comms[2].x - mstore(0x0cc0, 0x0ee9bbdfce93815e79aabfc5ec92a52346c46a45e17bc5bc9ad8155e982c9cac) // permutation_comms[2].y + mstore(0x0ba0, 0x2aaba546cdd9969ef0aecc85b2aaa19b6e9639879962661415c8f0df426bac0c) // fixed_comms[9].x + mstore(0x0bc0, 0x12b15327bcfbe7d9e9de1bc648ba3bdf910087362179a0b403cf70bad1c093c8) // fixed_comms[9].y + mstore(0x0be0, 0x25909db723a8021ffe088c50525d6d260f9157be7a7c194b6f315386a46cdab8) // fixed_comms[10].x + mstore(0x0c00, 0x25cbeae8ec2a8a2f74844f5e3276ed94079907bed6d7b1b26ed695328fe7bcae) // fixed_comms[10].y + mstore(0x0c20, 0x26bffd26dd8f5f7679281f8d1a432690e07b15cbdf684fe456aa1277515e1730) // permutation_comms[0].x + mstore(0x0c40, 0x015a3f09c82a770a69d67583d7049d83d69b7b8e03d38484497215cdc5979556) // permutation_comms[0].y + mstore(0x0c60, 0x1ee4241e91ac391756b0b9893ac1e34ea95c6dd689e7dca12c62a6ce943960f1) // permutation_comms[1].x + mstore(0x0c80, 0x10ad75f199bf1fb9335b91c20db6cd8958dcb2fe11983bc77cdb4036e57e59ca) // permutation_comms[1].y + mstore(0x0ca0, 0x05eb5d19e589c11e0bb2200d66da829955545481885cfbc9099ec6a53e266ed2) // permutation_comms[2].x + mstore(0x0cc0, 0x25ac1d9849f9f448cecc7ead7d48670f66bbfe7df8e248bd818a954df6936c27) // permutation_comms[2].y mstore(0x0ce0, 0x0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974) // permutation_comms[3].x mstore(0x0d00, 0x0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3) // permutation_comms[3].y - mstore(0x0d20, 0x1f5d69f8adc7def353cac5301331f66a6aa12c3bdc46ba8509d81c1922944c1e) // permutation_comms[4].x - mstore(0x0d40, 0x050a358c8ee74901afd6bebdda35a25be99ba631232abec0bb7df23428e219eb) // permutation_comms[4].y - mstore(0x0d60, 0x1ddbf91ceeed88a8c66e9bf8d089b3098dc083f15790870796a7267f25cf9bf0) // permutation_comms[5].x - mstore(0x0d80, 0x0ab4e80b0091cd40070294f754e54b127e2000572c0344c2838aeeaf251eb391) // permutation_comms[5].y + mstore(0x0d20, 0x1b95c5dc9bae0fb3f8208684042e57e0fcfbc3774af9ae0903ab9e9ddb4f89fd) // permutation_comms[4].x + mstore(0x0d40, 0x1e8564e01419713739871224ce15f4c4b51e6af161d6e07a178e6545879035bf) // permutation_comms[4].y + mstore(0x0d60, 0x1cefc889639cf98f94d831ea41c356929f9317778dda05ba0c5885401638db67) // permutation_comms[5].x + mstore(0x0d80, 0x1e0466deb22a86d9122bc7180b7d293e47288244abf1450a5cd63a3289a457ca) // permutation_comms[5].y // Check valid length of proof success := and(success, eq(0x0860, calldataload(PROOF_LEN_CPTR))) diff --git a/contracts/test/Summa.ts b/contracts/test/Summa.ts index 562c86a..9f7f407 100644 --- a/contracts/test/Summa.ts +++ b/contracts/test/Summa.ts @@ -61,7 +61,7 @@ describe("Summa Contract", () => { inclusionVerifier.address, 4, // The number of levels of the Merkle sum tree 2, // The number of cryptocurrencies supported by the Merkle sum tree - 14, // The number of bytes used to represent the balance of a cryptocurrency in the Merkle sum tree + 8, // The number of bytes used to represent the balance of a cryptocurrency in the Merkle sum tree ]); await summa.deployed(); diff --git a/zk_prover/Cargo.lock b/zk_prover/Cargo.lock index 2b51de7..7c2620c 100644 --- a/zk_prover/Cargo.lock +++ b/zk_prover/Cargo.lock @@ -25,9 +25,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -51,24 +51,70 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "alloy-primitives" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0628ec0ba5b98b3370bb6be17b12f23bfce8ee4ad83823325a20546d9b03b78" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more", + "hex-literal 0.4.1", + "itoa", + "ruint", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" +dependencies = [ + "alloy-rlp-derive", + "arrayvec 0.7.4", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a047897373be4bbb0224c1afdabca92648dc57a9c9ef6e7b0be3aff7a859c83" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "android-tzdata" version = "0.1.1" @@ -86,9 +132,113 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.4", +] [[package]] name = "ark-std" @@ -101,6 +251,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "arrayref" version = "0.3.7" @@ -140,9 +300,9 @@ dependencies = [ [[package]] name = "askama_derive" -version = "0.12.2" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a0fc7dcf8bd4ead96b1d36b41df47c14beedf7b0301fc543d8f2384e66a2ec0" +checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" dependencies = [ "askama_parser", "basic-toml", @@ -151,7 +311,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] @@ -162,22 +322,22 @@ checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" [[package]] name = "askama_parser" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c268a96e01a4c47c8c5c2472aaa570707e006a875ea63e819f75474ceedaf7b4" +checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" dependencies = [ "nom", ] [[package]] name = "async-trait" -version = "0.1.69" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2d0f03b3640e3a630367e40c468cb7f309529c708ed1d88597047b0e7c6ef7" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] @@ -222,9 +382,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -249,30 +409,30 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" -version = "1.0.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a32fd6af2b5827bce66c29053ba0e7c42b9dcab01835835058558c10851a46b" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f2139706359229bfa8f19142ac1155b4b80beafb7a60471ac5dd109d4a19778" +checksum = "2db21524cad41c5591204d22d75e1970a2d1f71060214ca931dc7d5afe2c14e5" dependencies = [ "serde", ] [[package]] name = "bech32" -version = "0.7.3" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dabbe35f96fb9507f7330793dc490461b2962659ac5d427181e451a623751d1" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] name = "bellperson" @@ -281,7 +441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93eaee4b4753554139ae52ecf0e8b8c128cbc561b32e1bfaa32f70cba8518c1f" dependencies = [ "bincode", - "blake2s_simd 1.0.1", + "blake2s_simd 1.0.2", "blstrs", "byteorder", "crossbeam-channel", @@ -298,7 +458,7 @@ dependencies = [ "rayon", "rustversion", "serde", - "sha2 0.10.7", + "sha2", "thiserror", ] @@ -311,6 +471,29 @@ dependencies = [ "serde", ] +[[package]] +name = "bindgen" +version = "0.66.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" +dependencies = [ + "bitflags 2.4.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.48", + "which", +] + [[package]] name = "bit-set" version = "0.5.3" @@ -334,19 +517,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" - -[[package]] -name = "bitvec" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" -dependencies = [ - "either", - "radium 0.3.0", -] +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "bitvec" @@ -355,20 +528,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", - "radium 0.7.0", + "radium", "tap", "wyz", ] [[package]] name = "blake2b_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", "arrayvec 0.7.4", - "constant_time_eq 0.2.6", + "constant_time_eq 0.3.0", ] [[package]] @@ -384,13 +557,13 @@ dependencies = [ [[package]] name = "blake2s_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", "arrayvec 0.7.4", - "constant_time_eq 0.2.6", + "constant_time_eq 0.3.0", ] [[package]] @@ -400,7 +573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding", - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -409,7 +582,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -448,18 +621,19 @@ dependencies = [ [[package]] name = "bs58" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ - "sha2 0.9.9", + "sha2", + "tinyvec", ] [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -469,52 +643,67 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] +[[package]] +name = "c-kzg" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac926d808fb72fe09ebf471a091d6d72918876ccf0b4989766093d2d0d24a0ef" +dependencies = [ + "bindgen", + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + [[package]] name = "camino" -version = "1.1.4" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" dependencies = [ "serde", ] [[package]] name = "cargo_metadata" -version = "0.15.4" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.21", "serde", "serde_json", "thiserror", @@ -528,9 +717,21 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] [[package]] name = "cfg-if" @@ -540,17 +741,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", - "time", "wasm-bindgen", - "winapi", + "windows-targets 0.48.5", ] [[package]] @@ -563,6 +763,17 @@ dependencies = [ "inout", ] +[[package]] +name = "clang-sys" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "2.34.0" @@ -574,67 +785,54 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "cmake" -version = "0.1.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" -dependencies = [ - "cc", -] - [[package]] name = "coins-bip32" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30a84aab436fcb256a2ab3c80663d8aec686e6bae12827bb05fef3e1e439c9f" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" dependencies = [ - "bincode", "bs58", "coins-core", "digest 0.10.7", - "getrandom", "hmac", "k256", - "lazy_static", "serde", - "sha2 0.10.7", + "sha2", "thiserror", ] [[package]] name = "coins-bip39" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f4d04ee18e58356accd644896aeb2094ddeafb6a713e056cef0c0a8e468c15" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ - "bitvec 0.17.4", + "bitvec", "coins-bip32", - "getrandom", "hmac", "once_cell", - "pbkdf2 0.12.1", + "pbkdf2 0.12.2", "rand 0.8.5", - "sha2 0.10.7", + "sha2", "thiserror", ] [[package]] name = "coins-core" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b949a1c63fb7eb591eb7ba438746326aedf0ae843e51ec92ba6bec5bb382c4f" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "base64 0.21.2", + "base64 0.21.7", "bech32", "bs58", "digest 0.10.7", - "generic-array", + "generic-array 0.14.7", "hex", "ripemd", "serde", "serde_derive", - "sha2 0.10.7", + "sha2", "sha3 0.10.8", "thiserror", ] @@ -647,13 +845,12 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colored" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" dependencies = [ - "atty", "lazy_static", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -662,11 +859,24 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6" +[[package]] +name = "const-hex" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5104de16b218eddf8e34ffe2f86f74bfa4e61e95a1b89732fccf6325efd0557" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + [[package]] name = "const-oid" -version = "0.9.2" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "constant_time_eq" @@ -676,9 +886,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "constant_time_eq" -version = "0.2.6" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] name = "convert_case" @@ -688,9 +898,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -698,9 +908,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core-graphics" @@ -717,9 +927,9 @@ dependencies = [ [[package]] name = "core-graphics-types" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -740,9 +950,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -794,46 +1004,37 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -843,11 +1044,11 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array", + "generic-array 0.14.7", "rand_core 0.6.4", "subtle", "zeroize", @@ -859,15 +1060,15 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.7", "typenum", ] [[package]] name = "csv" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" dependencies = [ "csv-core", "itoa", @@ -877,9 +1078,9 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ "memchr", ] @@ -930,14 +1131,34 @@ dependencies = [ [[package]] name = "der" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56acb310e15652100da43d130af8d97b509e95af61aab1c5a7939ef24337ee17" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_builder" version = "0.9.0" @@ -988,7 +1209,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -1003,14 +1224,35 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "cfg-if", - "dirs-sys-next", + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] @@ -1063,7 +1305,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "892df2aa20abec5b816e15d5d6383892ca142077708efa3067dd3ac44b75c664" dependencies = [ - "bitvec 1.0.1", + "bitvec", "crossbeam-channel", "ec-gpu", "execute", @@ -1074,16 +1316,16 @@ dependencies = [ "num_cpus", "once_cell", "rayon", - "sha2 0.10.7", + "sha2", "thiserror", "yastl", ] [[package]] name = "ecdsa" -version = "0.16.7" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", "digest 0.10.7", @@ -1095,21 +1337,21 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", "digest 0.10.7", "ff", - "generic-array", + "generic-array 0.14.7", "group", "pkcs8", "rand_core 0.6.4", @@ -1129,20 +1371,20 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] [[package]] name = "enr" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf56acd72bb22d2824e66ae8e9e5ada4d0de17a69c7fd35569dde2ada8ec9116" +checksum = "fe81b5c06ecfdbc71dd845216f225f53b62a10cb8a16c946836a3467f701d05b" dependencies = [ - "base64 0.13.1", + "base64 0.21.7", "bytes", "hex", "k256", @@ -1156,40 +1398,29 @@ dependencies = [ [[package]] name = "enumn" -version = "0.1.8" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48016319042fb7c87b78d2993084a831793a897a5cd1a2a67cab9d1eeb4b7d76" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "equivalent" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1208,7 +1439,7 @@ dependencies = [ "scrypt", "serde", "serde_json", - "sha2 0.10.7", + "sha2", "sha3 0.10.8", "thiserror", "uuid", @@ -1264,9 +1495,9 @@ dependencies = [ [[package]] name = "ethers" -version = "2.0.7" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a58ce802c65cf3d0756dee5a61094a92cde53c1583b246e9ee5b37226c7fc15" +checksum = "1a5344eea9b20effb5efeaad29418215c4d27017639fd1f908260f59cbbd226e" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -1280,9 +1511,9 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.7" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b856b7b8ff5c961093cb8efe151fbcce724b451941ce20781de11a531ccd578" +checksum = "9bf35eb7d2e2092ad41f584951e08ec7c077b142dba29c4f1b8f52d2efddc49c" dependencies = [ "ethers-core", "once_cell", @@ -1292,16 +1523,16 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.7" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e066a0d9cfc70c454672bf16bb433b0243427420076dc5b2f49c448fb5a10628" +checksum = "0111ead599d17a7bff6985fd5756f39ca7033edc79a31b23026a8d5d64fa95cd" dependencies = [ + "const-hex", "ethers-contract-abigen", "ethers-contract-derive", "ethers-core", "ethers-providers", "futures-util", - "hex", "once_cell", "pin-project", "serde", @@ -1311,56 +1542,56 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.7" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c113e3e86b6bc16d98484b2c3bb2d01d6fed9f489fe2e592e5cc87c3024d616b" +checksum = "bbdfb952aafd385b31d316ed80d7b76215ce09743c172966d840e96924427e0c" dependencies = [ "Inflector", + "const-hex", "dunce", "ethers-core", "eyre", - "hex", "prettyplease", "proc-macro2", "quote", "regex", "serde", "serde_json", - "syn 2.0.32", + "syn 2.0.48", "toml", "walkdir", ] [[package]] name = "ethers-contract-derive" -version = "2.0.7" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3fb5adee25701c79ec58fcf2c63594cd8829bc9ad6037ff862d5a111101ed2" +checksum = "7465c814a2ecd0de0442160da13584205d1cdc08f4717a6511cad455bd5d7dc4" dependencies = [ "Inflector", + "const-hex", "ethers-contract-abigen", "ethers-core", - "hex", "proc-macro2", "quote", "serde_json", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "ethers-core" -version = "2.0.7" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6da5fa198af0d3be20c19192df2bd9590b92ce09a8421e793bec8851270f1b05" +checksum = "918b1a9ba585ea61022647def2f27c29ba19f6d2a4a4c8f68a9ae97fd5769737" dependencies = [ "arrayvec 0.7.4", "bytes", "cargo_metadata", "chrono", + "const-hex", "elliptic-curve", "ethabi", - "generic-array", - "hex", + "generic-array 0.14.7", "k256", "num_enum", "once_cell", @@ -1370,7 +1601,7 @@ dependencies = [ "serde", "serde_json", "strum", - "syn 2.0.32", + "syn 2.0.48", "tempfile", "thiserror", "tiny-keccak", @@ -1379,14 +1610,15 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.7" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84ebb401ba97c6f5af278c2c9936c4546cad75dec464b439ae6df249906f4caa" +checksum = "facabf8551b4d1a3c08cb935e7fca187804b6c2525cc0dafb8e5a6dd453a24de" dependencies = [ + "chrono", "ethers-core", "ethers-solc", "reqwest", - "semver 1.0.17", + "semver 1.0.21", "serde", "serde_json", "thiserror", @@ -1395,15 +1627,14 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.7" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740f4a773c19dd6d6a68c8c2e0996c096488d38997d524e21dc612c55da3bd24" +checksum = "681ece6eb1d10f7cf4f873059a77c04ff1de4f35c63dd7bccde8f438374fcb93" dependencies = [ "async-trait", "auto_impl", "ethers-contract", "ethers-core", - "ethers-etherscan", "ethers-providers", "ethers-signers", "futures-channel", @@ -1422,23 +1653,24 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.7" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b498fd2a6c019d023e43e83488cd1fb0721f299055975aa6bac8dbf1e95f2c" +checksum = "25d6c0c9455d93d4990c06e049abf9b30daf148cf461ee939c11d88907c60816" dependencies = [ "async-trait", "auto_impl", - "base64 0.21.2", + "base64 0.21.7", "bytes", + "const-hex", "enr", "ethers-core", "futures-core", "futures-timer", "futures-util", "hashers", - "hex", "http", "instant", + "jsonwebtoken", "once_cell", "pin-project", "reqwest", @@ -1457,34 +1689,35 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.7" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c4b7e15f212fa7cc2e1251868320221d4ff77a3d48068e69f47ce1c491df2d" +checksum = "0cb1b714e227bbd2d8c53528adb580b203009728b17d0d0e4119353aa9bc5532" dependencies = [ "async-trait", "coins-bip32", "coins-bip39", + "const-hex", "elliptic-curve", "eth-keystore", "ethers-core", - "hex", "rand 0.8.5", - "sha2 0.10.7", + "sha2", "thiserror", "tracing", ] [[package]] name = "ethers-solc" -version = "2.0.7" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a81c89f121595cf8959e746045bb8b25a6a38d72588561e1a3b7992fc213f674" +checksum = "cc2e46e3ec8ef0c986145901fa9864205dc4dcee701f9846be2d56112d34bdea" dependencies = [ "cfg-if", + "const-hex", + "dirs", "dunce", "ethers-core", "glob", - "hex", "home", "md-5", "num_cpus", @@ -1492,7 +1725,7 @@ dependencies = [ "path-slash", "rayon", "regex", - "semver 1.0.17", + "semver 1.0.21", "serde", "serde_json", "solang-parser", @@ -1506,46 +1739,46 @@ dependencies = [ [[package]] name = "execute" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d9a9ea4c04632c16bc5c71a2fcc63d308481f7fc67eb1a1ce6315c44a426ae" +checksum = "3a82608ee96ce76aeab659e9b8d3c2b787bffd223199af88c674923d861ada10" dependencies = [ "execute-command-macro", "execute-command-tokens", - "generic-array", + "generic-array 1.0.0", ] [[package]] name = "execute-command-macro" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5fbc65a0cf735106743f4c38c9a3671c1e734b5c2c20d21a3c93c696daa3157" +checksum = "90dec53d547564e911dc4ff3ecb726a64cf41a6fa01a2370ebc0d95175dd08bd" dependencies = [ "execute-command-macro-impl", ] [[package]] name = "execute-command-macro-impl" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55a9a55d1dab3b07854648d48e366f684aefe2ac78ae28cec3bf65e3cd53d9a3" +checksum = "ce8cd46a041ad005ab9c71263f9a0ff5b529eac0fe4cc9b4a20f4f0765d8cf4b" dependencies = [ "execute-command-tokens", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "execute-command-tokens" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba569491c70ec8471e34aa7e9c0b9e82bb5d2464c0398442d17d3c4af814e5a" +checksum = "69dc321eb6be977f44674620ca3aa21703cb20ffbe560e1ae97da08401ffbcad" [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" dependencies = [ "indenter", "once_cell", @@ -1553,18 +1786,26 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.9.0" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fastrlp" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ - "instant", + "arrayvec 0.7.4", + "auto_impl", + "bytes", ] [[package]] name = "fdeflate" -version = "0.3.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" dependencies = [ "simd-adler32", ] @@ -1575,7 +1816,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "bitvec 1.0.1", + "bitvec", "byteorder", "ff_derive", "rand_core 0.6.4", @@ -1644,9 +1885,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -1715,18 +1956,18 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "freetype" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6" +checksum = "efc8599a3078adf8edeb86c71e9f8fa7d88af5ca31e806a867756081f90f5d83" dependencies = [ "freetype-sys", "libc", @@ -1734,11 +1975,11 @@ dependencies = [ [[package]] name = "freetype-sys" -version = "0.13.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a" +checksum = "66ee28c39a43d89fbed8b4798fb4ba56722cfd2b5af81f9326c27614ba88ecd5" dependencies = [ - "cmake", + "cc", "libc", "pkg-config", ] @@ -1757,9 +1998,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -1772,9 +2013,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1782,15 +2023,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1799,9 +2040,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-locks" @@ -1815,26 +2056,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" @@ -1848,9 +2089,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1884,16 +2125,25 @@ dependencies = [ "zeroize", ] +[[package]] +name = "generic-array" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe739944a5406424e080edccb6add95685130b9f160d5407c639c7df0c5836b0" +dependencies = [ + "typenum", +] + [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -1909,9 +2159,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -1946,9 +2196,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.20" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -1956,7 +2206,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap", "slab", "tokio", "tokio-util", @@ -1975,7 +2225,7 @@ version = "0.2.0" source = "git+https://github.com/summa-dev/halo2#8386d6e64fc33baccf626869123185890b8284dc" dependencies = [ "arrayvec 0.7.4", - "bitvec 1.0.1", + "bitvec", "ff", "group", "halo2_proofs", @@ -2029,7 +2279,7 @@ dependencies = [ "ff", "group", "lazy_static", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-traits", "pasta_curves", "paste", @@ -2043,25 +2293,14 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ "ahash", + "allocator-api2", ] -[[package]] -name = "hashbrown" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" - [[package]] name = "hashers" version = "1.0.1" @@ -2088,18 +2327,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" [[package]] name = "hex" @@ -2133,18 +2363,18 @@ dependencies = [ [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -2153,9 +2383,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -2170,15 +2400,15 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -2200,16 +2430,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -2229,9 +2459,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2239,15 +2469,14 @@ dependencies = [ [[package]] name = "image" -version = "0.24.6" +version = "0.24.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23" dependencies = [ "bytemuck", "byteorder", "color_quant", "jpeg-decoder", - "num-rational", "num-traits", "png", ] @@ -2298,22 +2527,12 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown", ] [[package]] @@ -2322,7 +2541,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -2334,32 +2553,21 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys", -] - [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb" +checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" dependencies = [ - "hermit-abi 0.3.1", - "rustix 0.38.11", - "windows-sys", + "hermit-abi 0.3.4", + "rustix", + "windows-sys 0.52.0", ] [[package]] @@ -2400,53 +2608,67 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jpeg-decoder" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", "once_cell", - "sha2 0.10.7", + "sha2", "signature", ] [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] [[package]] name = "lalrpop" -version = "0.19.12" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" +checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" dependencies = [ "ascii-canvas", "bit-set", @@ -2457,7 +2679,7 @@ dependencies = [ "lalrpop-util", "petgraph", "regex", - "regex-syntax 0.6.29", + "regex-syntax 0.7.5", "string_cache", "term", "tiny-keccak", @@ -2466,9 +2688,9 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.19.12" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed" +checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" [[package]] name = "lazy_static" @@ -2479,39 +2701,56 @@ dependencies = [ "spin 0.5.2", ] +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + [[package]] name = "libc" -version = "0.2.147" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "libloading" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] -name = "linux-raw-sys" -version = "0.3.8" +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] [[package]] name = "linux-raw-sys" -version = "0.4.3" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -2519,9 +2758,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "maybe-rayon" @@ -2535,18 +2774,19 @@ dependencies = [ [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memmap2" @@ -2557,15 +2797,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - [[package]] name = "mime" version = "0.3.17" @@ -2600,13 +2831,13 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "wasi", + "windows-sys 0.48.0", ] [[package]] @@ -2620,7 +2851,7 @@ dependencies = [ "blstrs", "byteorder", "ff", - "generic-array", + "generic-array 0.14.7", "itertools 0.8.2", "log", "pasta_curves", @@ -2647,7 +2878,7 @@ dependencies = [ [[package]] name = "nova-scotia" version = "0.5.0" -source = "git+https://github.com/nalinbhardwaj/Nova-Scotia#00085ece0e16c29a12f61866fa3588649620d7f7" +source = "git+https://github.com/nalinbhardwaj/Nova-Scotia#54f2bdbb78aad841d8714f7e2d0344bcc593a922" dependencies = [ "anyhow", "bellperson", @@ -2657,7 +2888,7 @@ dependencies = [ "itertools 0.9.0", "js-sys", "nova-snark", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-traits", "pasta_curves", "rayon", @@ -2676,17 +2907,17 @@ checksum = "9e12911ac9672ad436acfc992f09e26a5960513bbe81d1572005cadd8c1be8f4" dependencies = [ "bellperson", "bincode", - "bitvec 1.0.1", + "bitvec", "byteorder", "digest 0.10.7", "ff", "flate2", - "generic-array", + "generic-array 0.14.7", "getrandom", "halo2curves", "itertools 0.11.0", "neptune", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", "pasta-msm", @@ -2702,11 +2933,11 @@ dependencies = [ [[package]] name = "num" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-complex", "num-integer", "num-iter", @@ -2738,9 +2969,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -2751,9 +2982,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -2786,65 +3017,66 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", + "libm", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.4", "libc", ] [[package]] name = "num_enum" -version = "0.6.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.6.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "object" -version = "0.31.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" @@ -2883,6 +3115,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "pairing" version = "0.23.0" @@ -2894,12 +3132,12 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.1" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2287753623c76f953acd29d15d8100bcab84d29db78fb6f352adb3c53e83b967" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec 0.7.4", - "bitvec 1.0.1", + "bitvec", "byte-slice-cast", "impl-trait-for-tuples", "parity-scale-codec-derive", @@ -2908,11 +3146,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.1" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b6937b5e67bfba3351b87b040d48352a2fcb6ad72f81855412ce97b45c8f110" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", "syn 1.0.109", @@ -2930,15 +3168,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -2973,9 +3211,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "path-slash" @@ -2995,11 +3233,11 @@ dependencies = [ [[package]] name = "pathfinder_simd" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff" +checksum = "0444332826c70dc47be74a7c6a5fc44e23a7905ad6858d4162b658320455ef93" dependencies = [ - "rustc_version 0.3.3", + "rustc_version 0.4.0", ] [[package]] @@ -3013,38 +3251,54 @@ dependencies = [ [[package]] name = "pbkdf2" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", "hmac", ] +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9" +checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 1.9.3", + "indexmap", ] [[package]] @@ -3087,7 +3341,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] @@ -3110,29 +3364,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -3152,9 +3406,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" [[package]] name = "plotters" @@ -3204,9 +3458,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.9" +version = "0.17.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" +checksum = "1f6c3c3e617595665b8ea2ff95a86066be38fb121ff920a9c0eb282abcd1da5a" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -3225,6 +3479,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -3239,19 +3499,19 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.9" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9825a04601d60621feed79c4e6b56d65db77cdca55cef43b46b0de1096d1c282" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" dependencies = [ "proc-macro2", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", @@ -3268,7 +3528,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.0", ] [[package]] @@ -3297,27 +3575,37 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.63" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] [[package]] -name = "quote" -version = "1.0.28" +name = "proptest" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ - "proc-macro2", + "bitflags 2.4.2", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.2", + "unarray", ] [[package]] -name = "radium" -version = "0.3.0" +name = "quote" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] [[package]] name = "radium" @@ -3394,22 +3682,24 @@ dependencies = [ [[package]] name = "rayon" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", + "wasm_sync", ] [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", + "wasm_sync", ] [[package]] @@ -3423,63 +3713,66 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] -name = "redox_syscall" -version = "0.3.5" +name = "redox_users" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "bitflags 1.3.2", + "getrandom", + "libredox", + "thiserror", ] [[package]] -name = "redox_users" -version = "0.4.3" +name = "regex" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ - "getrandom", - "redox_syscall 0.2.16", - "thiserror", + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax 0.8.2", ] [[package]] -name = "regex" -version = "1.8.4" +name = "regex-automata" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.2", + "regex-syntax 0.8.2", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" dependencies = [ - "base64 0.21.2", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -3498,6 +3791,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tower-service", "url", @@ -3509,9 +3803,9 @@ dependencies = [ [[package]] name = "revm" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f293f351c4c203d321744e54ed7eed3d2b6eef4c140228910dde3ac9a5ea8031" +checksum = "68f4ca8ae0345104523b4af1a8a7ea97cfa1865cdb7a7c25d23c1a18d9b48598" dependencies = [ "auto_impl", "revm-interpreter", @@ -3520,52 +3814,46 @@ dependencies = [ [[package]] name = "revm-interpreter" -version = "1.1.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53980a26f9b5a66d13511c35074d4b53631e157850a1d7cf1af4efc2c2b72c9" +checksum = "f959cafdf64a7f89b014fa73dc2325001cf654b3d9400260b212d19a2ebe3da0" dependencies = [ - "derive_more", - "enumn", "revm-primitives", - "sha3 0.10.8", ] [[package]] name = "revm-precompile" -version = "2.0.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41320af3bd6a65153d38eb1d3638ba89104cc9513c7feedb2d8510e8307dab29" +checksum = "4d360a88223d85709d2e95d4609eb1e19c649c47e28954bfabae5e92bb37e83e" dependencies = [ + "c-kzg", "k256", "num", "once_cell", "revm-primitives", "ripemd", "secp256k1", - "sha2 0.10.7", - "sha3 0.10.8", + "sha2", "substrate-bn", ] [[package]] name = "revm-primitives" -version = "1.1.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "304d998f466ffef72d76c7f20b05bf08a96801736a6fb1fdef47d49a292618df" +checksum = "51187b852d9e458816a2e19c81f1dd6c924077e1a8fccd16e4f044f865f299d7" dependencies = [ + "alloy-primitives", + "alloy-rlp", "auto_impl", - "bitvec 1.0.1", - "bytes", - "derive_more", + "bitflags 2.4.2", + "bitvec", + "c-kzg", "enumn", - "fixed-hash", - "hashbrown 0.13.2", + "hashbrown", "hex", - "hex-literal 0.4.1", - "primitive-types", - "rlp", - "ruint", - "sha3 0.10.8", + "once_cell", ] [[package]] @@ -3578,6 +3866,21 @@ dependencies = [ "subtle", ] +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted", + "web-sys", + "winapi", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -3611,23 +3914,33 @@ dependencies = [ [[package]] name = "ruint" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d470e29e933dac4101180fd6574971892315c414cf2961a192729089687cc9b" +checksum = "608a5726529f2f0ef81b8fde9873c4bb829d6b5b5ca6be4d97345ddf0749c825" dependencies = [ - "derive_more", + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp", + "num-bigint 0.4.4", + "num-traits", + "parity-scale-codec", "primitive-types", + "proptest", + "rand 0.8.5", "rlp", "ruint-macro", - "rustc_version 0.4.0", - "thiserror", + "serde", + "valuable", + "zeroize", ] [[package]] name = "ruint-macro" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62cc5760263ea229d367e7dff3c0cbf09e4797a125bd87059a6c095804f3b2d1" +checksum = "e666a5496a0b2186dbcd0ff6106e29e093c15591bde62c20d3842007c6978a09" [[package]] name = "rustc-demangle" @@ -3635,6 +3948,12 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -3656,47 +3975,33 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", -] - -[[package]] -name = "rustix" -version = "0.37.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8818fa822adcc98b18fedbb3632a6a33213c070556b5aa7c4c8cc21cff565c4c" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys", + "semver 1.0.21", ] [[package]] name = "rustix" -version = "0.38.11" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.2", "errno", "libc", - "linux-raw-sys 0.4.3", - "windows-sys", + "linux-raw-sys", + "windows-sys 0.52.0", ] [[package]] name = "rustversion" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "salsa20" @@ -3718,9 +4023,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.8.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad560913365790f17cbf12479491169f01b9d46d29cfc7422bf8c64bdc61b731" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ "cfg-if", "derive_more", @@ -3730,11 +4035,11 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.8.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19df9bd9ace6cc2fe19387c96ce677e823e07d017ceed253e7bb3d1d1bd9c73b" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -3742,9 +4047,9 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scrypt" @@ -3755,18 +4060,18 @@ dependencies = [ "hmac", "pbkdf2 0.11.0", "salsa20", - "sha2 0.10.7", + "sha2", ] [[package]] name = "sec1" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", @@ -3811,9 +4116,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" dependencies = [ "serde", ] @@ -3841,9 +4146,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] @@ -3869,20 +4174,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.99" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ "itoa", "ryu", @@ -3891,9 +4196,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -3912,22 +4217,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha2" -version = "0.10.7" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -3956,11 +4248,17 @@ dependencies = [ "keccak", ] +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -3968,48 +4266,60 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.5" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simple_asn1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "thiserror", + "time", +] [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "socket2" -version = "0.4.9" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "solang-parser" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a94494913728908efa7a25a2dd2e4f037e714897985c24273c40596638ed909" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" dependencies = [ - "itertools 0.10.5", + "itertools 0.11.0", "lalrpop", "lalrpop-util", "phf", @@ -4034,20 +4344,14 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", ] -[[package]] -name = "spmc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a8428da277a8e3a15271d79943e80ccc2ef254e78813a166a08d65e4c3ece5" - [[package]] name = "sppark" version = "0.1.5" @@ -4085,24 +4389,24 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "strum" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.24.3" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] @@ -4128,7 +4432,7 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" name = "summa-solvency" version = "0.1.0" dependencies = [ - "ark-std", + "ark-std 0.3.0", "criterion", "csv", "ethers", @@ -4140,7 +4444,7 @@ dependencies = [ "itertools 0.11.0", "nova-scotia", "nova-snark", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-traits", "num_cpus", "plotters", @@ -4166,15 +4470,36 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.32" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tabbycat" version = "0.1.2" @@ -4194,16 +4519,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.6.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ - "autocfg", "cfg-if", "fastrand", - "redox_syscall 0.3.5", - "rustix 0.37.22", - "windows-sys", + "redox_syscall", + "rustix", + "windows-sys 0.52.0", ] [[package]] @@ -4228,22 +4552,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] @@ -4257,13 +4581,31 @@ dependencies = [ [[package]] name = "time" -version = "0.1.45" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", + "deranged", + "itoa", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +dependencies = [ + "time-core", ] [[package]] @@ -4302,11 +4644,10 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.1" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", @@ -4314,14 +4655,14 @@ dependencies = [ "num_cpus", "pin-project-lite", "socket2", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -4333,32 +4674,54 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebafdf5ad1220cb59e7d17cf4d2c72015297b75b19a10472f99b89225089240" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.11" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ - "indexmap 2.0.0", + "indexmap", "serde", "serde_spanned", "toml_datetime", @@ -4373,11 +4736,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4385,20 +4747,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] @@ -4426,9 +4788,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" @@ -4438,15 +4800,15 @@ checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff" [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "uint" @@ -4460,6 +4822,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicase" version = "2.7.0" @@ -4471,15 +4839,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -4492,9 +4860,9 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -4502,11 +4870,17 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "url" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -4523,6 +4897,12 @@ dependencies = [ "serde", ] +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "version_check" version = "0.9.4" @@ -4531,9 +4911,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -4548,12 +4928,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -4562,9 +4936,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "serde", @@ -4574,24 +4948,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" dependencies = [ "cfg-if", "js-sys", @@ -4601,9 +4975,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4611,40 +4985,51 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-rayon" -version = "1.0.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df87c67450805c305d3ae44a3ac537b0253d029153c25afc3ecd2edc36ccafb1" +checksum = "c9e02b7785fe15de188657b7d3a234ef042bfd8da10822016915e06d4e29cba7" dependencies = [ + "crossbeam-channel", "js-sys", "rayon", - "spmc", "wasm-bindgen", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" + +[[package]] +name = "wasm_sync" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "cff360cade7fec41ff0e9d2cda57fe58258c5f16def0e21302394659e6bbb0ea" +dependencies = [ + "js-sys", + "wasm-bindgen", + "web-sys", +] [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" dependencies = [ "js-sys", "wasm-bindgen", @@ -4665,7 +5050,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.11", + "rustix", ] [[package]] @@ -4686,9 +5071,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -4700,12 +5085,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets", + "windows-targets 0.52.0", ] [[package]] @@ -4714,82 +5099,149 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.4.7" +version = "0.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0ace3845f0d96209f0375e6d367e3eb87eb65d27d445bdc9f1843a26f39448" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -4857,11 +5309,31 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] @@ -4874,5 +5346,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.48", ] diff --git a/zk_prover/README.md b/zk_prover/README.md index f2324f8..28e4f5d 100644 --- a/zk_prover/README.md +++ b/zk_prover/README.md @@ -34,7 +34,7 @@ cargo run --release --example gen_inclusion_verifier The script will generate a new `InclusionVerifier.sol` and `InclusionVerifier.yul` contracts in `contracts/src`. -Note that the generic parameters of the circuits `LEVELS`, `N_CURRENCIES` and `N_BYTES` are set to `4`, `2` and `14`. This means that the circuit is tuned to verify the proof of inclusion for an exchange with a userbase of 4 levels (2^4 = 16 users), 2 currencies and a balances in a range of 14 bytes. These parameters can be changed in the script. +Note that the generic parameters of the circuits `LEVELS`, `N_CURRENCIES` and `N_BYTES` are set to `4`, `2` and `8`. This means that the circuit is tuned to verify the proof of inclusion for an exchange with a userbase of 4 levels (2^4 = 16 users), 2 currencies and a balances in a range of 8 bytes. These parameters can be changed in the script. The verifier are generated based on a trusted setup located at `backend/ptau/hermez-raw-11`. Note that setting different generic parameters may require a bigger trusted setup. More details on how to generate a trusted setup can be found [here](https://summa.gitbook.io/summa-book/backend/summa-solvency#3.-generate-verifier-contract). @@ -50,7 +50,7 @@ The script can be run as follows: cargo run --release --example gen_commitment ``` -Note that the generic parameters of the Merkle Sum Tree `N_CURRENCIES` and `N_BYTES` are set to `2` and `14`. This means that this should go in pair with a Inclusion Verifier Circuit tuned to the same generic parameters. +Note that the generic parameters of the Merkle Sum Tree `N_CURRENCIES` and `N_BYTES` are set to `2` and `8`. This means that this should go in pair with a Inclusion Verifier Circuit tuned to the same generic parameters. ## Build an Inclusion Proof @@ -62,7 +62,7 @@ cargo run --release --example gen_inclusion_proof This generated proof is saved in `inclusion_proof_solidity_calldata.json`. The file contains some testing calldata to be used within `contracts` to test the verifier. -In the example, the proof is generated based on the `../csv/entry_16.csv` file for a specific `user_index`, which is set to 0 by default. The setup parameters are set to `LEVELS = 4`, `N_CURRENCIES = 2` and `N_BYTES = 14`. The ptau file is located at `backend/ptau/hermez-raw-11`. Note that these parameters should go in pair with the ones used to generate Inclusion Verifier Circuit and the Commtiment in order to generate a valid proof. +In the example, the proof is generated based on the `../csv/entry_16.csv` file for a specific `user_index`, which is set to 0 by default. The setup parameters are set to `LEVELS = 4`, `N_CURRENCIES = 2` and `N_BYTES = 8`. The ptau file is located at `backend/ptau/hermez-raw-11`. Note that these parameters should go in pair with the ones used to generate Inclusion Verifier Circuit and the Commtiment in order to generate a valid proof. ## Incremental Nova Verifier @@ -119,20 +119,4 @@ Furthermore the benchmarking function `verify_zk_proof_benchmark` will also prin ## Current Benches -Run on AWS m7a.8xlarge with 32 vcores and 128GB RAM - -2^20 entries (1048576) users, 1 currency - -| MST init | -| -------- | -| 24.272 s | - -| MST init (sorted) | -| -------- | -| 25.480 s | - -For Merkle Sum Tree Proof of Inclusion circuit - -| VK Gen | Pk Gen | Proof Generation | Proof Verification | Proof Size (bytes) | -| ------------------ | ------------------- | ------------------- | ------------------- | ------------------ | -| 87.78 ms | 123.86 ms | 380.86 ms | 3.7287 ms | 1632 | +Benchmark results are available at [Summa Gitbook](https://summa.gitbook.io/summa-book/backend/summa-solvency/benchmarks) diff --git a/zk_prover/benches/full_solvency_flow.rs b/zk_prover/benches/full_solvency_flow.rs index 255ff7b..6d21b64 100644 --- a/zk_prover/benches/full_solvency_flow.rs +++ b/zk_prover/benches/full_solvency_flow.rs @@ -13,7 +13,7 @@ use summa_solvency::{ const SAMPLE_SIZE: usize = 10; const LEVELS: usize = 20; const N_CURRENCIES: usize = 1; -const N_BYTES: usize = 14; +const N_BYTES: usize = 8; fn build_mstree(_c: &mut Criterion) { let mut criterion = Criterion::default().sample_size(SAMPLE_SIZE); diff --git a/zk_prover/examples/gen_commitment.rs b/zk_prover/examples/gen_commitment.rs index c805de2..7c841e1 100644 --- a/zk_prover/examples/gen_commitment.rs +++ b/zk_prover/examples/gen_commitment.rs @@ -9,7 +9,7 @@ use summa_solvency::{ }; const N_CURRENCIES: usize = 2; -const N_BYTES: usize = 14; +const N_BYTES: usize = 8; fn main() { let merkle_sum_tree = diff --git a/zk_prover/examples/gen_inclusion_proof.rs b/zk_prover/examples/gen_inclusion_proof.rs index b5447a7..1069fb2 100644 --- a/zk_prover/examples/gen_inclusion_proof.rs +++ b/zk_prover/examples/gen_inclusion_proof.rs @@ -17,7 +17,7 @@ use summa_solvency::{ const LEVELS: usize = 4; const N_CURRENCIES: usize = 2; -const N_BYTES: usize = 14; +const N_BYTES: usize = 8; fn main() { let merkle_sum_tree = diff --git a/zk_prover/examples/gen_inclusion_verifier.rs b/zk_prover/examples/gen_inclusion_verifier.rs index 2b0b7e0..ca1b1dc 100644 --- a/zk_prover/examples/gen_inclusion_verifier.rs +++ b/zk_prover/examples/gen_inclusion_verifier.rs @@ -11,7 +11,7 @@ use summa_solvency::circuits::{merkle_sum_tree::MstInclusionCircuit, WithInstanc const LEVELS: usize = 4; const N_CURRENCIES: usize = 2; -const N_BYTES: usize = 14; +const N_BYTES: usize = 8; fn main() { // Assert that there is no risk of overflow in the Merkle Root given the combination of `N_BYTES` and `LEVELS` diff --git a/zk_prover/examples/inclusion_proof_solidity_calldata.json b/zk_prover/examples/inclusion_proof_solidity_calldata.json index f277374..1d91831 100644 --- a/zk_prover/examples/inclusion_proof_solidity_calldata.json +++ b/zk_prover/examples/inclusion_proof_solidity_calldata.json @@ -1,5 +1,5 @@ { - "proof": "0x11db46985c3a320749cfdc7677d97e0d712a984932a4de6e48552868967dc965078c7a6e38ece5ae9468acdfd2519775283e9a5d5b9672ea44413873f19aae37183bae8da7ea271e7b0693b055f18fef422333b4397b8bcc4d4d0bf45ff8fecf0c0869996d0cc750c1b0aab143c71432c48d4931db69f3f7e24af6535a16d5aa2b00c00bbd0bb1fd92971b34af166ce61f75950be955e77df674aef00957af96190258b40d0b35d7053d336ade8fbbdd050e0bd18003f8157fa241802bc8eaed237f721580569b325eaf3e6a984c0b2ec723e45df9d24999fed689a611411ca302f6e11f7917c66937269970d43194003eb953f821d347a2f43af1df64d5cefb12856d997c050ad6e296cda707c68b936cdf66e5aafc743e39ef59b348267e85229e75b1b9742baeeeb235c89eae028c9cd9e539c4b6572a50c84d3e987795c70505d5b74353a5cba67936f30ccb46e01c2ed3953b798653e24469b6a3240f7c15d503df912367ccb89f6a290d8c3bb6dde40865cdf9e6b562675c5bf714aac51d9f7cb32b9741676526282ea54c8149a89037fad131704197f97fbf9764ed72271990216347ed317e670bcef1dbc670f1969dd2c2555c4bf7ad99fb10cd58a3144049f42ac50047b0d87b81625ae41fb1b2134a4d7358768fc820b398d73bf0130f2cfe15e3188391a583ad3372060c63cc302c3c4ed722b9eef869ede8f22c261991b84228063915f234d20f30c56cdb57d96dd5cc9b525a76e7b857f9b80407cf4aa41e3d40c2e7220b76c47c843f84b17f043fce3b7c4ccc9f004f3bae5329ecd23410a6a92782caec09eae4b4f2c41000335eb3e744a534a62b1fd0b9a5103594331a46bf175435d598f6ddf7c846ca7240a8fac8f276b83a5c285b0ade1345ab65ba02c0365d49f24522215e558f87ea30f6b8350c8afae5f50b71961b03fd576f11779f2dcfc77c3b4c16d5a9be1bff5dc12bcbac85a5556d0b9ac7071a15d47e8a703ae6a3354eca38acbe5deb34c64da8ba16a0ba163c3256c91800182e52047494e3c83a91ce3f8933341f3701f6bcdcfc6b4880f06526a23c311e210020bab76c34cd7de9ff680ecf44ebf1e664623ab3b20339d4a982103742671ea8c7849a3c70f6498a9cdfde90b849445da8c26c5c1e45de1031c21647e605286cbe4727a6b116e990cc7d0a6dbcf41138f0c99339cf29259c451b9633ec1e22db646ad86b9713238b8cf79a1064a24f60911d7025385c3a1230702b76c23729a27053a30783f7caf4f00c52a22d73a1da284274cbff482d0e22c9032fb72c203a71ea3550396523c06bb2d3ece8a145e83de54eb9d3634d2257ef7792fc14096aaf3fa3d5a0db12241be0eac3306f4c8614f7f2b8a838acfb77b201e4e3e42a945dc7863c7f12ccc1aa92dbc6208dd296732b0b356229e3743848281af4132ce386b8cd63e5cee90cca4928c3fafb34fcc9b56e57455ee10b1d05f721f6451f97f31b16919afe57faee7954cc7da3c01b6c7a4bb0e34e3e28859acf4b7cbe1f5683413470bacb0a01b5ef4b9b6707b9815f1416f2e1687a0800bef2072fbc1897d6acfc20b236d20f443c511426476cf11d78d0bb9d99f1031716100c9eda1c0ab1c03a5f5919ba3253d0f49c5d2a319b0a090072e73c42115cc232d2264c263077dc0b5a2fc94646156b2c1b3d6856153dedb1af160a9ae559a2269408312d4079f051f8e3799666a4622a06aa3bf566dc0cffecc98dc23fb2c78ef470c12cf8a515aea407fa0f744c979b94ec7f9dfa89bfc96399cd892cea77174e87ed0c53c30128a15410143a9858d7f7c8b393ae4fc4f75408f9b87be2a36458771415f06890f304a7c5825875b0ead218da3d9404f477de57632961fe0165d60f9a1d3c7528a0d09a95a1b9c424ee463a124db3c0be061ff4db756321bd3b06fdf72c70f779f93120c5920a38cb504f6ee51fdcb28e7ea6e61f234503667ceccfaa1ea3c9056a504308231bd0f11fb55779d8075a7bded38960c4dcfcd68ed72d1629559a5cdf0db45d84ba7a3c1c157435cc6c34c5e3f39f2cae4cd70385c852c510d3062d0c13cbf758e26e5f4b5c5a865813d8ca56e8fde25cd304972a53410309eade98c7b932da4d7b2ea9c400a1d5e653d34f66fa9c0ddbdee3ee4ecbd61b2126dec54c5304a679cab3b7e5077b017af4b88a666247d8cbfd92a6f22173a3141f1d1a9ba4569338c4e5c038f371279ae81963d356ca511b2fdf637b49f6dc2e1b15c6feebb9a0ea5c010e24757b384e6f63299987c8ae4ef95254f61e5e010690042de02ba17108eb0b9d351e688abcc89c0790795e6459fb1d10d30a33b626d77b34e02bb9abfa8fe94a103cf2af182638018a94d5733b87266737bd18e817305734e4fa986db8579f127865876ce2a3215d2c62cb748df8039a9f4d04cf0392e9606cb3b02db2e61bbca1b06655e50a3ce3acfebd9f2b3b337c2e06b0061ed5c3660bdb2cd0493f4b8080d9752b0dcdbae1ffb6023887b7f831890d7c942a73fa59d5f9f5ca05ab217836665719e50c752b262fd4897df44ba3cd59959c1c2bc5bc31e2e4869763d130f299bba57b6a7d892b3d613db7eecd41b69a0f02154188030f04be9c192fbaad8d92ff2082b2afcc464f89998c4b55d1472f0dfa06d4cfb4709eb80b2290e745011adf578cabbdba0ade032611443dec4f059ddf24dc560c4e394083a68b7422053bffa8da521dff93b8cf1bc6cba96b4eb588ca2bbff4ca0f0f1c9dcc927aba9d251f0dfcb689a784415cd0db7fc86cc5cec35d0bfa5cd0f71d64f7a53c48d29bfac4ee4c0ccc488e98b2b1ca81ca07d3db65772ccfbfda450809059c59807ee8a5eb1197f19fbe1a92f03f307ba9e680ce015d061dfdc6fd004be085587d54dbc02500fbc20059fbaacae3008f5a88ce1a3ac9196bf63b231d617367502c72886ad5b218e88e1c420f90c4827447c10a0967d729a5750722b0065307d7e5893f5219dc6083112f7ddb6f84a3ae6a0942492343", + "proof": "0x099b655a72ad66888e1964305886c4c7993003b17ede68bc0546df28b077383701a9ff5f760f73c77ca2f768f10dfaced92fa87024be1d601470a35e1793f899012d48bcd264318f9739ded71a1177157ad18f37539b2dba5941aee67c955a9410f8f04a49c0ad9033fd8f96512abf2800ab36c333a73012b8da2ec5244923650b80abae3df7952513e169ce514bf7103062adf5c514b1889990a1f64f0e0981239bebd5877800a3a03b79832f426290cdb4da8aac2144139102bad984f4b94a159ccbadd7cfe525f5d6f48af294e4a8c1ebe342119273aafe1e986dbbaef6ea28f6d5db9a2e79ee2dcdff182b46b87457233de006ef08a1e2c2e168dad8d6bf305e4b48cbe8b3a793f80f9c1562c7abce178ea8672a45c0446d2c228e22464f2a28a38007d658d42426e790b193c38216c6df6494ee7c159b5e1ea006770f6424e48b02b4989c61743c8fe3d82e84581022f5100dbccdeed3257f24c6a1d47910a94b83a006c3b30d63933aee5176f5543761c7752175f82844e731324713560e4853fd3805e5765c719a73fb95f73a3a86eb597b41bb59a0798ae3a4061a212b85163e0c310af30d02a575a98ac81e4900ce5f4b899536301d8e75288f6748266b81397f57a9af767ba06f567336897f1395a3a8301e56604ffc04f7e762260616e31fb24b6caf2a581a5729921f6099996ef398c3f65fe59b50c3474d2cb30712a7500f4aeb7944268209de779ee3549bc088665c8d37e8ef0205123454ff2980dd7a99e4f8b665ca7d1e5199ddef3f1dda49e7d5bf5d4a0e1b3e43ab88952a88d12a96d037e5b7adab8991fc91abd56dafbd481fc9b1515f5cfeb06d922b03a6c89deda321893ab7414258d7424ed06d95e3c5ba140c3450e9605315dbaa041cfbf78d5a531fb20ed973b10a078fd9c0fa61cfdfc44275a4de2488fe2aa11fd6df19d45b2fb315d11c4635b16b09937d7a64c9980f0b80442fa163f5d13f0135c4ea16e5b160ed0ace73e9304702fe2c89230e194eeb17f15ad34218cf920ef036144cbc71a1d5af606f69a0199b3c95aaa3f7b76d4acc43930f23855fe3080110255a5f74dbc664f90550f0e2cba1c7abee1cedee6c957335ac529837f1281f96debb692df148c384c3601a62316cf660efc3aaa9aeda7541a6f9e1780d008c006cabd4c71f88f586bbe3dcaaff491a4d64e711720826de1e917ecc843b160e76eb81806c35439a995562e8c98bd29d23d2ccbfbb576ea3a068626886da1f0f6af74d39cd467882f75cd14aeb9dbaf6c04fb386019f69f9d052d9073ee72f65c01f4e37ef15eccd33ef3f374775be266c5a2ea9185ada549c88fdbb2e0e2d70a0d1a6f6477556d7bf092b85820409c9f9812b14b53d000aba9be503791106a8f2a5808ccecca9334e0df14dedf6c504e0e36fa3f55e616afd6f2fbf67382efefcf5369e6ec9b3e00a37d1f124a147628722f473157a51b1f4133e2238bd015b1508d310e271cdd0b7ab682472188d81dbdcbd264effe5b4aeebd6656b8108d1ce33d75443c58930c7425f2ffa70babf419324fadba2085f1fe5345382231eb87a3c22d4144b4a2137f2cc9968ddbbe084b42fbed844dfbb8ca04a0f84c62fd3d65fd20fcb93e63b8fa1db8c35fabd21dc360fec5ca772f307d8a3498586278bc26ceb63026c98e5a57b9e6216ac1946f2d018778120818f7b42501b05432f0c6b21e6f63b9e9000becb7a037c7412e676d422104f9ff9433a4233a2755114b9c50057a56a70007dc7db332d79f8e5b4f2ea45d62463506e604c78b9454a2a2a7837fe4312126f1688b7a5cf827fc154edc6fe930af78610989c855dacb510554f398e173ed85ede46c81cdb7e6ce57df43ad2541bd13963ea4a9184193922b185af0c568067002240986a58a3da91afe735b6aa6ce129d867bcce89ef0802d592d61d4cb0ba6255c3505e1f63db8e74510100566050b29f7cc66c460e9317cffb65833fc7c9b415ca470dde83008f77ec06768fa743637eca387ce7b87a09c5f2c0d1e2bf04811348d2a2d2a7f790f3d1e3fb957e58946828074acc61441ea08a3328c7254f9ac4dd788c7cc481fd23c9224ace6c0527c5878bb4ede7eb0c2f456f511b00f4bc99fc16085608d91b6bd596f83066a481aac412ac12446423fa9fb974f4adf0ab3ca154eab827b58a5dcb2a0532bc209acc2f0f315d0b141cb14eb278a8d44aca7e782fb57a29fe3a57e53a3e036d33201c7e9d443b46410491bb8fbe0783fb9850ca0944adee63f5cec918cd2eb1d9af5e04a337151edb24297a314c4e0d44f53e2f1039c4ffb2ccac9982e18d499570884e612bdb72fa275575c9d407c23a13052f364109d9513e32bc814df584c7dcd1b749749693240f5926f172bcfa64969b5120b70396c3888d6181e5d07d6e3acf1cbde2676ea922822d7abb9e832becb2f0e454e785bab709dc0e1628a7db40dfa2eec66805fb1abf5190c075be19afb87bcc0ad8e721ba4e0214c2c2bdfd88c00b5761842d090b2b8742864c7e5ef173f39786a6fbda94e129c40969efffaa979c32b7e915752b9bf1d5137b5028383dccadf48a7403b1d97d4d3832ab5a6abadf1d9bae36db2d30bcf77f36804a9e9c70e81eb5922fa813fd0fe831b7370846c2ee2a56d4f12e29f6e5935b7917b5e18bbfbf299da681fc9e75582a067624633a8ce3dc7f4608589fdb8e608e84ddba2d8a23d68aa2373563bb01f890c6af1a035ba954e5e90813ffc1bdf750ccd8eecdc2d968569185813698decf2e6d7271c7a038aeffe92b94951a8944e8e1385aac2bb16a6045ac341ec4ba78f52d28ba441645046c8b08a2e9fdc9b7fe53d5ef98bc24057709b7f04d4b34def8946d2a9dc32ae6cdcd0d72cee5d4b6c6e5b8780a96fd81250d950640450eb102a785a67808566725d626e5ff264c0ec0a72c072067b7034b2520e1d8f69ff3c60f02aac6c4ed42721b05f053b92ee64e7d7b942ab86e0abaf207f472255424ca1119493daa2c2e2601", "public_inputs": [ "0xe113acd03b98f0bab0ef6f577245d5d008cbcc19ef2dab3608aa4f37f72a407", "0x18d6ab953235a811edffa4cead74ea045e7cd2085771a2269d59dca054c955b1", diff --git a/zk_prover/prints/mst-inclusion-layout.png b/zk_prover/prints/mst-inclusion-layout.png index 5db063d479a353ca8e7b6ba25987c296438258d4..61d9394dd523b27c11147a8301ac776025590f5d 100644 GIT binary patch delta 103455 zcmc$`dt4LO`u|ISh=LFWLbyk(*1D}k>jjldw0>J^t)|v(X;p}BYuObwAZiGZ4C=Pj zT8)NC+Y1Ix}YtsJ-mH&-tG7`n_J~4>4pe ztXZ>Wt><}vKF|E}EJ-F#IzG+WO|*Z;p&67zGn^02a4DSO`pHb$nfb0$ygdlJ+>j`A zjm4yIfw`a4>44_tK2P?`8Jfw3M%Xc{Bqtx&2&{m?YLpQxT{A*uS$kYN7RcWHj{dGQ z#SV@yclUF#5r<@3KBr8jfFu{{1euXePoC71%b#dlC!>z) z9>LiNzUKPYgpvXc)dE7lb`EBPkM<`AhsBlXhkJ8UMPF{&n_86KaeHsshn{qwvc7d8(HG1*zhe?0P zDf|2fK49n9G@qHHEg>Xjj%qDHG}@v*#DA9R`9gL-K$)hhZ@t-up%eYE zswKjn#jzM|+JVu#MgAZ{Zk|_lQCN6hTBp)Bp1g^#wq41`WdduJ!tJ+XIub~g}z z1-1KJ8UCZ+v&vb-jpE-OhPc90!od*~?mEE($=$K!m`~lTjmJ8{+V?ydU`mTK6?_^? z_YR~PXQRVaddn$Ep}4vn`T7BfzeGO(4DV4Gvt~#LIdAxN zspBmc@gv*biCB(u?MAaTQ&u!mlFc@4MH@CKun1HI*3NeJafwf~f+-Ki`OQ6}8Q!TL zuIHpbI2YcMYHL+%R!d9qCus|Rid`|w5T!PFl*=+Oj_8@DOkJov*OmQfb)Yj6032uN z?;!YdGocgXZ9I0@G&TNBwsP?#@4MNs%K9>1;-O^AHC^u_rOHVjGuO&$i7* z2VMTS(t+7BM-Df_h ziSEbHuGtFw0=Iug=v^cn%p0OdgUZ96K5#U-egu+OUi1wQXQR(nIfm+pb{6hn>hw&x zV|LUCkLbG(Z{O!BiH46@#;@e7ve028VhQ6JzsT=CQ|+AzM8z=_vCxp^BvbFxuTngm zmYN9!FTQh5(3gJlKA0Tn;qMNg2?RbeIKu`EYHz-5<~jPCu3*xLi#xLZMt54&kQB^O zYEK~9JBs7Q4(Z7`RmmNc8{Lc7IAZUg>RfElA1A;0{c{C}^c46++(u509-`e=ZA$A> zPv2OeoJJ&WyOkWAn)z_iF&AR}Tg{8T91)+vZ;HmAF!h19D@3?xAQm4EQFVZSt@QN% z2z@NYh9qSTL8AWM#XVfTQe@?*`aIeDiZ>b2dMWlmqNv=MF_ady8|6Bz?2J5_Lbq8?kM}Py1OD4G1=8Z^E#{9dWY+H%1_IyKYbL*=Q{52gn9g>=bB!$ zoqLpQd#K~MR^3&@T{ykK#@tc3N%k}~^TLJo)m?{5w8w6u4i98c`!6%_)?>#$o|BDa zjc$T{_x5iylMU7VHXmFeDn8DyeENE5+w;Gpg?BynD&shKHy1zV!O-=n2S&d{D<3@) zB_0K(W|wb(^dvPH^eyo8rx0Ldmh%jtKkn{N4{ft6j10X(yGhv~Lx3{9>%uMysEDQd zQx*aCCsaD!!%3l!Kn%Ll+P!f?J6|A=iS9cErcR)SIomOC-qn2>kgRnc?>xZ*&NsQu z%6{V`KfqJC()^gF=WfYOhm7fJ>l}8o;0ObVjwKrsfETy2MGxs`*6v_A& zm7eg+Zy21b-8^%1k4K_7XZow=|NM(NXu2W(Fc{s zi}N^4#B3J${9*bAbBp{KV42)CQHD{e&Xm_uZ4V6*yHNAPg)>#UbMbmx&>Esr9W?-F z2U(`nUP2Rr_#f$v`Es@0BXr~%px`|`kycDt5*SAYP^?*9g4?p>rj5vOo#UZ0G*lNo za$P!di)X+7EjSTO_kZ2QCGIi_L!C~~ZETJpevFa72I7j6%zTk%CO3WHAm?n+G1ym` zQLc;+L~3J{gpyG$%XrvaRujWE97ak|WD8I4NJq_#pFWOZ8|QOx#NUf z?G1_$P|E%M!QjjZljv)mi;{Nfv!iW^L>G;~>D=x+MQSkh@814E5khzKRlpI<#(Yo= zc4<)rkDXo@rvZ~EQt9CQBZ|MXRWN!kzaxwhQCqs`bhW6v?PJjVlxsAncp?-R<`&dhic%QhJ5oIvm- zYGByqr@7U-V$Bz9(>g9zjXHK#9Xn^OQ9Jh2?AL&x!-p7d+iY%D40JLH3p)**STHeQ z27JV@UJ3q;jn#9@jI}f0`D@!Rhf1S+v*R@!yh{^rpsT;JgQPX?fx$l(x)h-J7JjSg zI|<$^#p>DEod|u#<0x|^1}00WzLY_*#nav2IadOh6TAZEGgvC43wyA5)5tXT&^sK# z18!@YR*iJbRE+pYEO~L^_Cl^bmt{G??;4v?kq9v9AD)3^B)b)$xBdLURd+9jtA&P@ zfb#*qKCXi|Q8hRYoc+Kf)kM1gDb4U<2_DZfyNhvLZ@Z%>bljzppR55NqLb+^Lw^^N zyZHru!6|mJ+~y!skbWozA^2E_88Nf4haATmF!|a9KhT@w&Y)C*bJ7VR!7vI)>$<=k zKBpd<WWH|1qKO-K8y*)Ws<`^Qa~>Y_?#fvKmQrv(_q`#HAnrBRWei0&wnhn1np z_1Tg=5dZ__*Xe$sEyQI!`1)N}FR!{HQ)t_|Xsw(((#^!cRQ1F_D*EzT0-Wo5!4|4( zV1R0HHMe^en@Gpo^|>V}JG3h~MFT6?eIeOX;uz}$cVb0v5+Q3OOKR5>m0z{}ZV@6@ zlHYnE3 zzOQx7RE;~kROm=oV2sy>E7{ngoQ+57EdS!!E=uf`*?Gry0*TuM26abz!og~AJjgd- zK@K{iS;QV*$4%-RzAkY*QagUB!wV$XVf8KSAlpi9jtF9!Cv#yyW?x=^QKQ{jE-3-CceKy-;mib<+@F=j=aP2oi z>gBAc-U%|wzn_O(bDmrpv2sVwE7eK1SW&xJp_`4keiC}MM4=e2Mxut+b2~4Jj7q$J zMtt8EGP@9MYz`{VLv(iZQI6sPhp_O3ssxdpgWu!bx-6^!!bUqx{=%a%?xHjtA`L_B$I<(_J-z=~e0a`5SVg+kF)J zGa$8<<~8$o$2%TKGiDC1lnj?-WtDObbd+Vi8-m>&y(qW(iNtj_t4tZcpP;bj8}p zK?Bp!(4uGI!-oH~j?`*V2LsXZ zUo>J@`rW8k>C{-x)m+xNDsnha)Gs6Rt-lF=?zkb#Xja;8vIQ+5LuGa%gG$ANeEIE& zvT7~yNKdr>;cHiOx^11l%y21jk<72Wx~%1bs8@p@x66m}<*rCl&l#Wc1*;?TVnv0( zsdiI}^Y@o}Yn%0@?RV?pW8o67qcc5PM0Oz@t7+*8E~!l*{fXXjm+Qn=B{K&pdV{q^ zFBTDcReM}KL4Htl85M4+{YTit>*EJzq^=PQV9X2iC(rVoQdIT z;eCyeHrU8Op68c6Tjf-~HQq6`{2+6;OOhtUOkoa&O6suDdCCY~0{CNZ*_9217w|8dveKmLW2%8VNRvzEw_9Mp<6H|Nm0(fe@^H@7d z2X0lRycp(_L6V>Q4sf!azR~qb!Jrd3zuGm>_3QeWEO5S^=I0ULyFNbn$GCP;&PH&4 znXj+wo@=Nh`_b3*ar4=POX?bMp6TK{1!in_Jkk++EJyTYD|6V4*#G*2WN)Nc^fdX? zS%(tlWpCN$2L_k&9d9-E;tMP8nS+~XeGT=H?wlg@dAioY~(B-G+S4k}Y zNcdoDeq6CR*JINy5LfHRa8aq+0p|*p?#{*cGHYD+#C1~u<*$q&YH#G?PedT8lun-* zD8=4drd+R+6&6y!=2}1BS4TyU9+gsJJZ4{Wwx!tg1)oyI+2O)=tm6*X@{F^%SOYRF zL+s7sv?sGMOihITYWB#DQL~DE`tDeQ5zO_Tzz9JJyV}Jjs=%VV*NH5%(IMFFv(*|n zP4kP@_X5?n?4Aa`F*TA(v9|pCKaDe@weHY!wIW-haeRnd$@AI2?66H@LFqIy& z?6{TM9V@CH7|15K`FNPp?vM2`@h%dS!p-tf(7t6d zeVibaW%!l`Huuo~0y^f>gC>W_)Mk=5sEJn8*Bv*-gS9P_7=F1`v&)9Ist4riEU#mDt!ekbj9b!S&jcSfdosM8$aq1Zf85?=4^vd+ zl)W_wCg;1;kr^xhJjs1i>3hCP(YT^kA|Li)59Pqry@e@yP$k07@y`l-LHcJ`FX~IV zmeXqccVf&Ip=i2+zRoqT<{CT6ptuHYn5}qlBqXFj@jOML zjYWFJs3}NvL#s_x1k_fC!taMY6q*F2kB=A`o&BrOmT8G|gla=%JPenp8D<&LvQwrq!lmDb3>fI= z|6@xd#XJin7ALum3wp;XNz=1usppgkwXGDzG?{v9Zk+|!6a8N~w{d~$HEMugT_-)h zeYJX^HCn4Da5G}dL%+1k!PE-6zo$ruI^h;EvafJymk3;cjq1OGOh=fO6HIFd8S|Pm z>Jl;tGqUf01|$F57AKzNOMR(~kM}o4sMErkJ2+d%5gKHqAHhXFf1H{*PkDr+I=`6!Ip6vl&y;lcLd^u?j__dezmV2sb z`W-kQATlW>cm0N zzMC50y>ZnaveGNWP9VBLWh@{bNNpW_wP0jE+q&^ma@xJhU5-qeFsJ6~o%-C}ngr31 z?1RqX<5{g13e&a-F^6+{Zh-b1R3GHmz0@D$t`-hDKPh;+AvIHmiC5jhg9}* zEI*qweqB+35HvwfUQ~B&oui9)`fl%3TB*S$dU$7Q=Cg(k9^j<6kfH{I@^SviN>1us zJ94i%a$pvp%&w{ztf2`Sk1_|(^NcbC>mv7e`p%nYSR@rx4Vbb2SAQ*(7?g2fwq&!< zSDv-}BDD<03QeGFAizwv`t>AbTmT0@PP3Ne>`Hq=CPtC$!hMDNBJ&hnC(!({YiJ-R zqeC(jslo@?I3F>`pqljPfhe`nSkw>Nrn(1$YmKf{pSYBogS(2_x1fU_YR46+ZBdJU zbnE!l;Zc2egP2y(_OWY#bEFu2pHB;&-1bN;y0~$d;9-0FMUY+`?hGV%=z$)Ei;`ch zlguWVEa#qfUGUeOiIqkC-a$y+TX^!okMr9b4Rb;_2j{ISbt5Ba3Isfzb3-B&caHS5 zG_`K6l9dz;ImN`}Cx3q|MBPCRs_K2LtLU9yC4hLSVetnf=RceMLy<4YRE~4~o9bfa zx;(K#KmS<$#nyu);+KZM`WU%`rcGX?7p&=A9QQ10F{IwKxvw_9eYA7W7v?rnJb-$` zi|vGUy1@Yxns4&)tjUzJ7C5_}5>WkT)G^J%vJcIz>4w|)2MY3A^n*zYf6DTi$uCm3 zw{QQ1Hgk;*Mgt#C8Xpq4VSBs!GkGX$Aaqm8zyzIaLjkBZ9nOx3EC*YDcK1adweaZM+sWvASu;LCu0=l^0i; z&qWJ;;DwKUd_(91SDu$g{a$K$aqs@5u3XWVlD+D5Q^3wKN5X}iylG2z?s(YL_730n zFgdsC?%lJV@kPJiKwbMg&84|Vou}=CH_#g1Tarc|!CZM$P-lET_RG34VTLuf4WAJg z%OSJW7g|H`sDfcaTNWyF+m`IyRU00zi7fBw$w*15O#w+!;{uUE-ol){%1!A9+`eah zZoKo2=E+{uGwqt8vx~wtIXNlupOM=%*Nc~^Th1Ea-Ww-}&_6P-rpDUSbCxmX?a?lO zUh)9>$C%iHWRLw%ib%IAU@LJ_oLUp7l)zqmsmLHJl_s*IVKb?)g+x54{brIsSo6A< z8@N1+IvsqAc?W|f0xALGmqV;b?z21|zpk%%d0{4EJV?GWkq*B6%6+~p*$c{OD@oaf z%NnJ>X-&I>XW}!+pMRV-^9yXm)c>{%!GMa6O=$=1YWD!=L!FLytDI+g1cSkUcrk$U zLeH6C?v6?Rer}dqJXN*>)00u~D9tqpO#hYc?WPVF-mTZ!K-8~v_H-%nrPQK9hKew(QZBEI6%@kh@@e{r znPwjGQrj{0-wFf4)B_Xdf||Fe%beps1Iy=8{lKJODgNWf@rK_=@H{bCUhFr;WxCD` zl2>~MgSm&i7!(&UEgQ1k_uh7X!`a{j=KbK}3y5rADu~OZ1_Ajz>YFaNZY=^QO5h{@ zZIK#A%Gn4^=g9em-y%|v49p74r{_{Ejs*DBD#)Wdw~ zG6k;RI=I%=L2%v=Hk;h0JD+p|$&390oG}dS+CujSXE~l>P@i;X_@u5uhdhw!22$FR z44&Y^nHwzsr;ERfXHGSkcaAq4R`_v%OBhS_OYLCtW6E@An6*Go8{mQvGJyWonE_V+;ynkvaRpwIK55b{ zmr5A9EMGyTefbg?mF$Vb3c0vXTR~~A z4bsv=GR92Roa0<6)QC93J}&wDeJ@bgY*i#oT7-MDHQ9GgP}3k zHlW52b1jEZ8;P4D%lSfO9)3@p@d!r2^-}pr1IF8WP#H~% z1lnB7ZML8xR+s~yDjCsVhc{)h9oy7edFXJw-bB?~j!DP`fSlXY-)j*+SWm3OhV&UB ztn#ZI)P9rQy-`!)Nw*$H%a?SY!KFFagE#9!|hDtu~9vC z8r%3z)iFTZ4)gmsRp(KtDa={t89468s>oFRWANw`XCJU_o#$UROcpD;|Ly!V!E?_| zBd^Z7m2I8@Q7Q-Ni(?KcxWgxyM6DD`$c6^)$O^=+lVwE? zkJFh+HJNL=$hM4K2CsFWHi~J9=MGM0+Sec!$U7LwNNOldW}qNF0En(Ck#5y3{-V^( zI_uB8^at6y2nEx=NoO{$WE<^V;v{>BY*ZXf5H-YLqM|=5dU%?;JqR7C67_2opQR^s zLOw@Rj8r3*7pICI=tK=r>@Y-@R|$to6M8^E0cs z`pS+yU^yO&?z+Yb(?6d}H*#HRyPjs(c%mi@SzUAt<(agOD#g16>PI{&4n=!z=`* z5!kQma`)KHSfge)%CTE`jw9^!NZMe$-rR#i=Cr4-RkJ@P+IC88{TDy|-U?ouh@82H z*K=(L*+cWWd-^R;ch(h|U0^oB9_mzCX(Byu6xO;#b_R%DLJePm&Lyq;nmcRH7WY0& zWKJw=*eG<(xDB7D@JY$+<`(^Aaq1GC`Ky?+;3OdZks3UIrz}eM@H8~uj8v3wlsCkb z$9zzq>VR;;QKLs8h@(i&X)l8)V&mH4KIA;8_}R^WF{$HFo@%da`-<)Rin(kpggd|7 z{9aSo_xU(kG=OfFAup05k7x~%Pk zXvl3-dh307swnG9+3I!qg=ghFPz~0uhAN_W2|aX@6WB+C&zX+A@<(F9Aeg$A66o^w z?mMF&0ADm|u4_U;lmT#dc+$b_61wMfe#<@<37|J_3@Q&tlzCx`dKj#J;c!-lb+0nY z|GAwCbtg|RSATkB*NjY)?MJOGMWbtj=!5*{1m?==44{{dbB{jAbaWuN2K{+MNUbIZ zu>y3Y8O2sGhnI6r&!kuZbcU%%hVzJl>avGHXP54E84LU|-aAPR#M_`^ErlK!QFSYm z>B!~cay6bWAx^7Z9-^(Q%AQo7%1-_}o%;MDSGN}2?WS)V_x+{A)pwJ#L;k*;id&!o z2P93QP6K_rsQxatcUFSv_aN(F@~FPf8V$+8{G+S_lQOM0`K+Qh5pj${azj4SKa$W= zT3nb~87}B<*j|JMm=zU4^4G>%_R@v6o=E#Y(YlZ+a`Z-VaViACP>>=1-WDTjBL}I1 z^b5KDs|{+!$FgCph1iB`%4v9;hJ=faNjc==)yN-8P}EzGi(XS?{Gn&RURdJaw6LXF_>1J&7+#X-&!o`BfNexcM-a*hD) zb0^RPq=WB^qxieb)rz+CyvwaaKWJ5uPX0q<07xHw*7)Z!@)gS1TuJu+9f6@V(Q{9h z;UgOK8eugbbwD?Qm)EHycfPULd>&;^Cs|VPxEi*jbzLGz-AxSz)3o%d6fW5RKfVET z;`x10foo@5FQA{kf3~>ic16XFH(nyG)X>6H8{Ez52jT52)kT`Y`5N!{K-6@IKXu{R zmFcsoDGB`IevrI*A_GWf`?-U#KKlHXggbOWrD*n{{T>SbnP+ooCAwCXeRXOmC&Mux zs-d~5eZvNh^(XU^eLJ)efUVCR>S{&|FvORMusWET`z8$((t6+xd$5om80yBhKyTrU zc;ifDX!fdE3AHV|ldhG1vST;ew4(wefk|lg#3GN6VW8hrqv}5h(|Ht&6?I22O+Ut3 z+Gu!S+j*MsvRl;iJGBzjxSng;`2zkS^IRKyt`J+Mk3}0#9zEI~dK()51I$IA7&RmC?;Ay3&G*Uf!v zVrP5B5QGl8SNJ3a{R42JzxE2+fX{LmJN)lf9_)r(qecH%w_K?_dUOf#EtvPr-G}bf z*0$NI(A$Mj)zw9Trl}p?+`%u^<%?W zKl-M75CR9~kkd;nV+oS?WMM-r@~?gjwNBFPfrZ5_ZQg4R3@oO&xJ?= zA(_Y7MT>fN3}&ocno=_%x1K~$6jCcca!Fr`e^v!$iYSsOUAsOn;UMFG&W|23W$6B1~)nB9DX>wreR2zhtjXMY02 zkYFHfK);?E@K;731HozP-Z|_U8(->Fgm@AR%8;w0_D|N5r5g%Ac$t3u=4v>!A@u6a z8N|0QU1Owa3}>F-O)e?_$J2cmnC^oxg>TS1E~7F2X^CaPlolzpSxQlTPITuNe9XXf zU^w0mb*^-j*cjPA85)~WqB##I-HN-5MUB&TrQMXJnew8o$H1dn51$E2q%ziFB$edG zPpE$ZgD0F_L84=P2vC=~FLP$y02O)ACXy65o-rZgV0hX^Hc?-dJ@vp8XKy&)&7%fW z+Q9XHQ5cl{U}r4#@03)KS?V4D)_gZ97}S-zzv%*3c5wZ;yDu0X2Q$#$oM2;@(90yQ zl9$lqKd3~oAjDC{F8$4w71_UqRSB<0kLbxH4OC-UQT^Lg{WZ~DmpNEIbPGsq*J$=} zD-mNjYFdR3?}UUyZ`C09D!ZLAGE$2^$S-Svq28_+zym0Lgoxmt(3820G(Es49kK5& z9(6P1$eXem^E|RBM(1t{tVT} z6(au;5Ix&#y7L1UFi#4_3LNK2z*N#hML+~&174@x-v-zw>MWNpYqo*w`5yjYF@QZ3 z7e}2740>-r$^kH$?Hb_nld==+U+(SeZ~0U$P{wIQwwWS3bbBQ8Riax@f5CDA58?`j z@|;G5=OMf^fl1J`DzYmHM?pj_4(b{paQHRH7Xk;3yZ`H6BVy9`b-B=0^TQ$Z1fc_TT+@v zsS0?I}IN|s`oG3|Z*ZoI-7wg^s$}HU67)YC2 zbY9^Ei-AcD&5Udpm+rdzBC(!5wR{ojR6jh*7zpTjhtm=Q8N&SK*Su9Deo9UaooSs4xP7S*dc9@dreW4=`=DdPf)2QBjKb z*NF`Iiaw03>r~i1Rc&$+^e^3vc7yp z4SXn?k&y(VzmkdH(3|3EX;QQ806(LO^TH`iL`~Plz}W4w$jVn7W3)kw-~z}qhUWYs z1xGBUc|r`jr|U3V?A|!+qJ*fFT5m9IgJMCIl(@pgvcLZ-)ICgZc(+AQI-9@`!`}2z z0Tl1c_`PkVqUSd=p(j+2sWD@8+X{6L2OrdfM_+g{-e}|aW3WGalwN4?*+W>hq^y}0KFlQ_h}4yvtMkol2kAd-*v zXXOt4s~Oc-MFYF=SryXBbu@JfGRAGlI*+> zvY*e3>>bhDuh(^p>Yu2vf#}W|+@8raq^m}49AKN}Y+EsO@pKYlAV^FNLExgtY=adW zWt(Lxn^}T2@dR~I9Jf&GJwSXfw$?)6t0rtx;#Y~ic(2lg4zE&=EaV#ZGx2uyAoSaA zfe6qX60xrb60vinj}s1IWL()mv#zW%BI9vsS#@4A%C(-RbuYo!FL1vkbAV*^-F#krBPEAkP{8!iAPQTQY=pS+FHM zBP4P8By4HnM|DhQ5sCx5VV*s@F>hXnDla7&Qn{D$7hwflEcb+OlrGgCQdMm^^Mo(%UVZ@XpVA*okZZH zs~Vgf)`zwQ)TIUwlF*{A_f~T#zvtm%eKN?M&V zf#n;|;Q74Lfn=Bl?15RrI91=(Xy@p^ow?gtRp)^AY67l?Ua4|rI_+gl_BG^*9$@*0 zlz?TViheC#92Z;HDyzn9pH^+V=$m^dQhMj^H};)8UdzZgrB%r=I)wCy0_CisC%s!a zqQ^VypKPC#pl|NJkxi-gb6wiV6@m6C9KY;KK`dru3iJXklLpF>ak_SmQA2Oc-S*r(`b3Gk#wp`LXzPodGhq(h+e%;pVjXk2~=9y&gcP`!&hg5}dTuHt}I?uXh5_c9HE!>w-r>fmH>fwQo z+b|K>66HqsgAAAhm7cJ3t*U4NJjyu~dmd{86`rnvE}307fOxHU(836aj2e3=p^i2N zykz2HLtj!fEb>7eh2$b}rcRd0vt2?zee)KdugBn;Ffc!1mlg1id(z{fdtTD9q*Z9H zKNb>^Vjti*K~5$})VdC?Ru6|Cxig~E$>A!CMjcE1LC=WHgBj%=!cm8OQMmMMT{r=Q zqyb2QrR5hw zSC=3I8cQ6cNzw7E8GF#v)3H`8{1qg><>gD&GG-VYU=5Gz?-wPknb78jY5<~_5q%n@ z$LzEf5{~OrUHlP^rh%)ySe0zMB*hGD8;08NO7ZK>l4O0)(+*E{*U8xYc8G86P|ExI zckq^!kzwv(lOlBtQG0|crLG=Y{J0mM7HB_@h{)Ry=aV`+EO@vsA*?*t9e53yx~CLJ zT1uq$wow_3GyoN7p%vm@Y-%qM$-9Tzf>1*xVv0qz;i67E^i!x`qcV`&Fw8J#Kq;b= z^tQuTb>a4bl3jOGY|vTrGaK)eVC_u&fL4k;U%|9})LC?@gPbdmF!W>y^7-a7@4`MT z^c81xRddTy>tJvb?xHn)OI|iMa5vd5i4s)^N0^4?)=eSElv5_j? zuF&+#@C->q-}8}X$>2ENVEoI`<$n@ZQGuy`9{ypZW&SWovvBa|yi?u@1xu2XuD$v7 zhE;P8X`a+A&5gNw@zgJvs%>?=l?;TzWcfH>u%9u(AI$iLzQE63WAjRNup==uqLGHn z{KyDpTp6hNi!X!P(i9h#4k$;dLD{s7B?0I!uo$eRxRqr;pg(tMU-iL)beUP?lUoHS zH+_A9_ya244WbIKI4-QtnCv&#Gt6(kE`@LA8&^q z!Kh1Lly#q~Dr+tkJ|*QNNPZR~Lo?AE-|g;sILFPc^x}6LN;gF0u2Zuhoq`6P7Cjj# z>Pxh|Br_HuByCJaB^PMStJ_r8Q|rQx7%hOT*x1K}VODx%B7sUrl?rZmmT>d*yQajjuT^ zUi^tdUn;6iL{-%YB%)D-awT|>HX#_nklniASWFMEjeRVCYgKI$x(Zgo_$uucuV1y_R3Czpe!9e}X! zWzqHT>aSsI@+&J_eP$MPie9m^WCZd)EO`@*BEQr?lgLmA*R)r{<$r^`mi!mw1=*Tmv znQ0%;S9==9lt=x*4wqInJ>z+8yg$H+!^mQi|l^rI>O*AY50GjZ}k6& z-((QK{UbU%(>gV4lJ9ugB;N^_FK1^er+}-oU1rMKVrZM+1|R<5=?cKO{(Gz%9ANKyE|o3vq6Aa6j~0BR8*c?y9VVub z=AzN^Qex>SYqUc3IJtSWfOWK_bs2dIWR&u;omA?#7Hd&Lwu=L9_!7q7-(A z3pxx1T{peL7)%zZJ7)4sUouNK6q=*m8-Ekag;QV9EkdH{YZtnXsP2 zhF(%tQfDt&_t`B1l0D;@Q$w*vH^KllVJR^r3GQb`L5e70BfXVuTga_j;V}Lf^;TKO z!&=o*>i4=|>KgUPYBmNzkD&4>EG-nOhD)>@Fg0v4odN5(4!A*G+6qM=427x=!(vB; zec*f@eM*=`5B=n7(^Yo5K8i8Db*N3Ng1YsOg^m*FUx3CIn)49|wK+8lWxh@42B4I+M`GbTF?2BEgRn*stL z_&@5fpLxI_r}`}-mQUIYU%8QIJ%Ym8=o7<3tU3t5Oj3ge*+s5@jGE#Ueo6zvTp7vE zTN6jV3c~bS1o)u=c9KatT#Xv{mO07({*JRZ#g%-2z;7_(eH-LAw>&gvg*GeNqo{Ml zt|D65deX{_leMe;LIz51v5+bp4};L=G}rod9X8A(#u!Sn#G&I2zAn8z>Lm!6qc>0G zVSEJp4#l)HrKb|Z?1#CIA(;KK2{<^~CB#u_lRClys|PDkIJQz}gwo@Cuft&wM@zrG z8W}U5M6ySnB!7__pk#E|&Clt&;aoV*_5^csh{3Ne>3?v2Fo#9_Pav^Q14#o1rb{ zShL;*K4`w9O~yhUziP=uYWtZDSG#X*)VEVdi-Z{CvTKZ2;@Y#PJ_rKGW1Iurq{Dw< zc|9o@ee}TG`JUsm&4P8{&9^=OXI#Z9)N$cYYWu8B6)>sc5yfo$AZl;d6DPI2#Zfu@ zKi9Mrs~3Mje&-ffbggci)>Ljxy%Q@iJbc)byn}5!i0*5?YIcHe(x~J__D+D+uD$#w zU5O10cEi`wl*s9R&hf6JLi^mvJUu=lv3Ig9rA!>>7UN&m=Si2;qFr>Z_0FjnEz9zg z-jT~AtX%vMyNj9%9@UTY_kvcCOtOW|rF-sqECj39x=zoYiuySdkHE6`ofSZyOr7Ei zEy5ju^{F=l3@1}V0*cf>=`*W{%6eGvi>JZ5K==^sn#l=C2OPV%--k)4OjxB9KFH<~ z{}9{yU^ze(oUfh7RA)G)q!ubuFS8vOiow<_SqZBFJjs`cu#CIKHZ7X*n1&EiXYzCe zO{hJ3)S5l@xDQ~~c<&xp*ZHclf~u*D>$m}uFL?QS*c)Jlhtr3n6&{8OE(}lri$OfA z2&_I4mT@?}F{4B=I*<4ev;I7f5MyuQc{k2;$Ls@|Jut+D0W1$sW12=Mjm?#FRrojQ zJi*}JxL67lc+>UKsQjh?~M01hSvS!(&9c;JUv&kF0Y^yMkr|~&PBX>Wew?(J37j-Vdx^>2Qs(0|Am%1 zc?antw|=_^I!(&%f%A*$flEl~bkt#9(}V3$8PC2DRF^%5g7BadxrG`51ANv2g+6rT zs~i}M<%hTKo>TV)I47Vp|KmCR89$8r&jq6CHSh|~ypncDN4hgH4xC=?97H!cg{yZD zu<)nKL3Llx#sch)+7<{Z1}F^Ycizd~f^SavKO8;D$dIazb8C|{hID$%L#^TWPr(3b zblO2`{{Ib~crW9k|5fNDeEBAlZ1@5cjp278k|48tH`V|hW6&ZDU-|$=ru!S^?NwnQ z5jTyx0I#YBw}R@0fTDKwL-?jYS?-jwPMZP*sIk^v6L9)I&{(paWh&5Mlp|)*Q;4|3+DJnfQp6y0KLAm!EApf}gbZ2wO=yg-fvVaQj zBImz}_^o?&c}Rzh7#1`6nt_DGIefJcTK#l1C>2Wv1roymM>rJnt*9eL)JZz7WApb{ zi#lV8J&W`Nxks^NWaqN0lufXd$+W$V^5;$EqoSa5%?K#}$juK#F7uvT*JLQ@aPTrrxT+nRIcZo8mn|sVl+pwru&WYFjXHyO-HL|I)aeD#*qR*&RCCa$kQIWRL3Zb!?Lk3Ol8B=hA(e_~|mWeT0XYfar@b`!Ohgg5~Qy1K!(# zltZDBN8I5Chk;G|3^I}Sm|d4%Eyf!2)Pk9VLtM^u_~qn+Te&|rBU z)Q&`bY4Vn5OUELj@fXLYCRlS^N?{-RKvQF`!20<{pg#-^s0)>dZK1TxIcOq50l z;2S1dTQO+XZ-S=K9f|3bjC#K40iPI5KuqDn7Q3izV|3qjTE`Mt{^c}kkYwULml2G? z$uOHm*-~qd7y;(gY2{z&%pvNbn`DrdAvO!(+mudm+HO4Tx-ozp_0*Z4LpHB6Y7mS= z4BuoAx}Z9r==O`D*7uw&&p4KUNTB&W-5f5g|L6gE5BfubGisn_CdsHXXLO{?mFmb| zC`8t%A7b%6YsDo{M!x%nbEx^}JcCnnP*5a0-OY__OlF#AlJpjak*07?+T#R~G2D2z z7SZXPIVA&&+A6|Z%8fVW*DJ7iM>`Gu-ANp8_N0WiU4(wz2wf@f?CWjGob*82ul$g@ z%0+dT^-DwBvQeE@^s@0p7nINIq0KP!VN1kf%Nen~hz;j4>uqzI6cs$qjyC3?0Zz8j zRlcMTnB~+-&cvE*gW%Kun_v<7-vx_BFM`F5VVfE?@TFQc##Ey+_2{Xl4I9PK?hPe$ z-4`5}OtJNW)KOm*rPE7nPadA#+iG_F!Yb>`%Xm<)FEcKTw_PmVkRYtXR6Tp+HEqwI zheUhzW=CT=ir!|#mM55;kuCn5jzs2h>=2_jsj*g;rBh&#iK`1P@O5X!P^O^X^!#0oX_XCB_L*g9k=AR$F0z+uTrg5(IdG=4Qib! za{i=1sWw7Y_85HU1_w3PDxrFy+kVaz6$_lzu5@s`-`mxdjEcbW5HEiadWE(cuxq@V zkZil0eBs)<+zdN>SC8_^hN6C{WO(`y`Gxr>?eg2uFR(~zT*@XzrCw-Zm@2;wUxGjm z46VFlHr@j@WQI`5r@*>348Az#QAAD-G5B+yyb8)%i&u*U_f|w}U838>xK3ZxZ;EfH zM_Zx(5dpmjh?a%F?Tx_k@oU4gh6hIDX(%ZCw_}|)&Vme>2h8jY%3w-nl&(OP)% zg3!3DaaUXP3%Nbp{&Z@1X7k2}nnb`VEM_9 zdW6IeP$+3!9WFF-9Jl8v4Ysf01dEWC zB_-^KQ=2>kJRQyG!1jUd)Xb0GSJ#a$bM(L$%iO4;0@it+_$&vx4?Y>7MKj1C;@=FD zj0$l4Ds9Tt>;=H+}q3&Sv*f z=;O`qzHb`j?Z(<}$9E>{nas=z>8<)C?Y1PTDPpshm7GYet(Vr8aC_qf1;>xqs7~3s zOLSMX)azOYLwJP_{3mtPPwfUYyDI=c`eCXC%^VQ&s3{0@m?&&TN}k?2=TUU_?ZdZ1R$Vb6y*p>_3Lb zP`4sPt3C=xHlxsn0(_RhB>6FfD+Is%^vlnTNTy#(vA+cjfm6}K?!@OTXU#v=oUAXkU|L}8l znSqq{;m%~~FQ1Nh7Rj4jJw1qU{Gpvf2lkI1H^$aoq@tTuj?*7S-v};+_$7w3k>*6= z=pvTW^2eOME~^qxha+4wy3p9gK3v8IH1%o5G!(}i6~HJ*37g#(yRNdKZ&rGb3tk`A zsFxM7lMVS&xbBB(Z9nmKesXe2UJMdm;sl|a8U6wI!N$15mkHdPftqy6Wi{1&m!Hz<&}x2U(=|1M_m~ zrSybCf0TFE*8`m|_wqsUfdRuu!->GZi8lcBuJ%hjN{>E&-}Nb?w~R2G1bxr&b?Id9 zN}SO=+d$7#Hh1u?yK7a_o5)@oOI=5~`_JOQm!r!$Eq5#R5LefVYa{G8`n_arzb%$a zO{Ak5c6O`w-+>1PD`J}#KP3=@Iq zA=5Boy3^GFCT-nU&=7-ibksUp#Nam?_oe<-)y;iU4l&lOg1?HhOE1sSRV#Y8-goq@+}!g{ zZSW73_!>wb0&|UeBLth2#>Fv=^SBX9IkJs z{?l6s=cNU|ed*E36JLZYhU2ISh6b}$)}R(hu>`%4fa#9)7^_|Sfb(ouL+`twb<=my zcLzqZ2^Doi7(HW#^`zGE31lRVkd2!tHQNZgVRBcPcu+J2AzR|i=?ys9NJ9vre@$+y z$4s`PKx#-+(hKRvBx=#2s^l(|vNK=0YYyLdT5CNim%`A+vizJ+TuSeT;n~`fFDijN@nQE}qt94DX;&15>2d^>@+cJ1J z^9e)xBkp5}#2R=$!_gGw$&;MY2#F^9h3Tt`I40Vt$cj2K41S0zJSuv++l8is2aT!s()v_@0i&Jvq=CnjtW z&^P&#T~#TddDoNFZXxw8m>3)Gb;YG`{c^kym?LEOR)^|9YDfY@#Oal2Z{{e!W%Eg@ zoapI*?SlbP+;UWIJEHD7bzAjvql|9U#;07}*fL`-5D4Q7lb35bQln{0-{w05k0g_J z&X#JxHZ(`7t7>T66{jyFS|jKtq1=j@E`au!I@f2tJLt1J+mSb<_q=Y;EAB1l-^)<8 z-$k>&9TAA}AGRItV~II)*3OlQZ%l$nm;=~-F-PNAQGD=nQDzp^y_`jkFrQW1YO|yJ z=1&$`7K%GD+KhPoQ|Do%?UkzBswmLo(io@vpq4ZoUaQ5o!n5apJ^& z48p^{5fNM$nK+^p)_7oTENt$5i-#g2vx-P*oC9;#0=1|FT#SYyvI$+Q@nU=I>Ax}B za>bYZT)cMO&|Q99DA|DxGUadX$kQgLE-LR(HciyI7Gut2y3hQ;w~5gY288IClWBc3 zfZb6#I4f;)k9>L2uCtKe3~;FqyVU})^r0DRo3#Jdr8DM3KF5iMd<1 z0=nywEXEj=C-C+_g3sLD)2DrPJiSR7=tjjJLZu(LUe1p_ILx;!|B~J(az=WoX>9%# zh3|;r`IBGt)uka>k^fY*K9CXgjMLkt(rIM2m^`cSDX=lMh1ufqD8u_rK&`~=Hpe`4 zTHw7RJym%ceSX(9!7Av^Z#*z;3Ih>p&tdt&Mz>GL zdHj+S_b(8r&?`@QX6O59S)Gi1sh<8%KP9pt5U%j%Jw4^`#n;wKt9cKQ)G0-J0XKi@ zD29)FFtr+N2%8_aKw?KEe^~zB3$9j=|2o>eANdYT63M5Y99Npx4=P!SS?uGTwt%0U zu7UCO8#Of|ZDA?>aqbCNw3Bgb*9Xpd=s1Z(&Rc%#$fu z6;ifk$lKWuw?5Bq>%oNqz#$;_G0 zfi762zLz_Ff4LiM=XX^pHK7ent(!{**(Ttd7+-LY-i6k@&z{EKRIp@zZ~?LoDp)|r0p^&vdz}OB z7OH+hR?l(LR+LmH(!LZPD?KABF1v9%iLO&c_g)AgFruUN%9U`i`j+&}D`x5v;kH;H z*pML9t_fdjgW@2IrRnZpBzpX85PGTKyRt1FD9PANn>?+Eb~ z56S5M*X(@ZOZx=fs7cH5M}`vLwTL_1J!A$|0dxzzbq3}DlX(Z2O*K_`Q4ok6eS#=G zIQF1x$@T7*mk_IzC zQ2>VonW0^+Rg4z{|THj9FZx**}xgT`V@mR6(kK4D9)s$u#OmrV9qX3 zZ}UnbG{6YM9zJ+W69=+I@XdW1z0>OvhGER#xVqG#MXxYB1j+Y8lf+#tTF0YKbEEDC zsmv|#VVbPJs!nOoY(vTBv-BMyZCnrd)~wBCq3}9L-3hR2MjV`Jh$O%TY#1S5W=jGm zuiEIx*DJEjf1NAP!=cY6dnV4wL3?;$Z(vYp{VZm%kBDgEOm8;`94&k)z_^ne(WqI> zz(~3es9(6JWW-zE1-2`RFux}n7R8`L=RE>F z2R0fAGfp1`xXlS`L{oqCp2ZA{Jn4>nW&!+!_{saZz=^Cs<%*)4MiBP&(ce!-Biu&> zy1kck7-OFUC-=Dg+nmr6BlvAgj@Mkk&=V;r<**h8WHg2^LqI7wv}i+99(-@Az;s|K zTqr&tfp;ODwD`^Myo2_-j|f5mKJF`k)zbv1UR;@A2kQAoP4%txtPQnk(i@R~bF!aD z^n6(1WyC~FAP)@>K(jJEec?kG`<;LAFa@=USCNR6&y9!}p_Wt?;`y5tb?zK70j&rf z{w$FKbk)x^y=Ot$7wX=cnEKfsyrKo-{W?61B-^tthm9xt?X%k@Eg-8_;h#`4!+-cp+i65oT-*Mp2$4UOX&V1jT6x1Ti(#^^gAZ8QU% z*z{m#>)dpt3WLQo{kb=1IwU}(n#bITITEzkl5U9n!Y8if<6vTcatsVI-+!Ne3^?}i zahLQ6=r%u+%8~kGXh{m39+y$mqLBeBH;}9AHmf#99K2n9&<*?4L8r4#>o$F?&;>TO z9$7IfBiJN5Q6)YCI6@(HPcGE1GfGS^E9jn<8IJ1^-YhDv$j${9%)AWE^2;k9&l*O@ zHUqik`R_f)F+9LI>OTg34b5Yvi@xx zMQIF)cZq4vY`8nV;clj~Wwmq|DAG~Gl6$vuN4`+ikzEfvJ_ooFI!2wAMYRj#PZ@7} zs5iLju(-5@@>aUm#$XDU)I3>!$a#eA`Q)YgSpdnSSr%LIm{0=zQJ7UjxipM zX!p;M(l36|i%mQh(u*EL0s-1}k_+~_yG5w&A1({T;h{mgFYH8d56(=igt0g<8Pdwb z&7Z?rtYtzPer=5U{TILuJn#jl*iIoVNm{P5<0})Qg53qE`UUojp204krS@&^JhizS zMPKv{LA*)qWdvgurtGTLPL;dK?U3&4fJ>{K9>?uD00}_8t%$U_tM#ELw{-3D4r|2M zWUXVHATaw#P9NSlL7CMxP>GNx{ZO=`rNN6MwSnloFV23xP`#6HZz6lsK%`v~KRE!8 z$US%{=h=Rq!;nT9X)~Ng}&ypB`KtJI8YR1RA?@cnFd&^qh{g7omQDUdw*b zd&#rRU#nJB-Apufx%RV2&_C9(mwW9le{(|A&XhPz=-3(TH`dQB%HG5?!1cDI@-Me; z^Hz#Ag$W_~&=GvOKD9zYLpc5sr!vj+GRN zv=DX?suNYYFpQ~BJdFClIjDZ%_&$Lp27iPGaFiDfqD=9%6*I;DvOE0;T&00a5zw+Z z?ysRtuW(JLE3g6IxS>D>{m=Jh~y1h}K282D_U! zL6rq+YG(zwT>&&{YKUimyRi3pD7?yp-#t~Dp}d_Vx#b}))zW8`j(-=%P_6QUqywgf%z#-BaX4X&@@_^< z4-6fvm4Mc=8*900lUL)PskTFt^4Ab!p8Hy~dn0?ID>D@pZDj99ug)F$)EiFxY*e=N zmi}OXVW!FU4Fn@d@fp83&DNNobNbkjv!OBK&M4C2otQR8oEDxYU2Q8N@zo}uYUVu+ z-;R>>FFy*Mc+R;4YW*%>R3xOKTjC0AVJ}QR#<3lc(PmO~X~8MTQ563A^@~~?N|?qD zo-H&0MdlTuX_K0QAaW)I6BW7-c*d9DdP~qZvOlgVgDDw(N8z}gEoq5RsunBTj^$2z z=wgQ6zC1Dr&3Vn6gS=k^C5iYeF#l%1$e!f7#E6!KdG2=wZ|&*y;bYPB)7W0jbtfC8 zDEsT-JphbSiuApXzV6efp+H9es&`8=Oj;wBiYA#B=T;SYcvNM+d>+;@`Fm1H zUHKq0VWETQ$^S5ywa@i==Y+^gx3&r5NF1bqI*2#)c<+aVinhTCla-v`EX}`m!F8;6 ze#!ziww1zJQ!#jD#crc_+VK(ARmM@F=<^k7ra%y_F zGyoNiAHhiT~Ynbm7GPIfEOB-I0-KzP@h+%EA zWdhG)*Fq2`r445S9W`9~tk8a2PO3bL&qJ8V4u1dKTRmNB3$O#9bM<#!RG!|5IIfV{ zINAqcwp%&NOM>6rp|$K5JnTvar`PZh*Ye?r`zw0~%De5$8LPIprAuK`g=vNya*NaA zx|1&{?&4au2#O%rhPMww(G970z_UFEANCxt8Uty`7_iWqJaYQpUh6Vo1b!!UOo-2G zpSsk7UjOCO&a;q;HKWoxPYzo2%SbPj_*8)Zo7k;uEtkUD!FmyQR4IEx_yBg(iXP(0 zef4ML*AL-!#=+Vw;~Fl#Yrl_IfIBWYAkm>--yi~0Vmcu~{^tNWtlo7v*3G4kX?yzw zmhn9LO_}79pAZZx#7ztwbKtNw=sp4mFzdj2)Oz#dij~}+ceFqfH>?-}f&pxM3()bn zdU%{w!oGVhy8B2v_G6fIKYoq)3tidE9Ut)YQ>dc3zg4_TO8~$qAPzV~fDV4v4GX*cf9F@(hTFg@G>#;gHOprd8m0^B+eJlCis2x8JfY~|#D1-P zzueM6CN~$6rVKGQuoM-Sg)pjt5t->0PjD+slc+f!Gz|`r7O0 zoi^6HXyRqxfK{0lr|^?alHKAtev^syXmheUsWeAvo#*t#;^4^d;C>klr~fY{gkytk1@4ua83sH{60 zTI3zXEu9E$VAM6Py&hQVhgTi%p30;4V5_O1X&=|CKU>GFlN6QW+?*e$S$bUQ7DlsT zX$NHbVU~=+dytydM=|`JUnw;6SJr(0A)PReIT*NNqo!Pze?ZFpeRKW6eqOUh`z+E0 z1iXc0DeOty0h{P+PR338t4=X^54Ma(@xNMS$O6SPcy!!9{sCNE&7frA_lZ#wVN=PY;= zeud#S^obXtjxA~y)~x8~zg<7Zg9^pJ>7OU}317h@+k-pV#17bsCip2i5%y{@ zUe-`En*uy)_X8zr_}kF-Hf~rOOsceQTXcU%+YAkBa{6r2=JME!`|XSG=VsmD9dWl!zzaCIM1ktG7_zCpn>l~=^thiP?3zPb9a^RBh}~vy=1Dsu zODgYPzChlDx$i&++`!9My#DaO4)l(bi}Dt)jVgse%ttGGUaj9)R)aT+ffeFQ$2)h+ zaWUI3D~GOD{ZgF3H01FFWpr82&E;$TSQ|e1UA?FUD&q3OaR9mu1RH~Plk=DACTGc8 z|3!-aXy}Tu79Bb=dJOP;0plBpn56GBDCT|lK=!|np)m16(3#0$ySu1OnPjqQspeFk z(ot00fM;=^yom0oOqxBnyPe6xAKnh5vC&L_9wrXE5E$VD#D(LKN5_-= zrG(>bgEg0L1sl;?7AuKst6nIo&3C*%7s)DFfzLp~x&@|ct4$^+g!sncxV_~tZ?WO_ z7mRy#qPuWS9OtD35;rTrRd{hs`}&6V!*bxQKA`!5CIpkeM>^g-()S+ZxV2a;XzACU zoEgsudg39vuAsLI%`v4I3PFL92)wba`8fV+2h_?-9eq8$cSB&p#UB9GQeDII;UfPf z19_w}XL{tG*iaLll!=tzxjn;(L8lcSf&0H^jb=Z`STZBuG#55;h@Lcp{zB370p?dj zfm;aUBkx9N%~QjfET?whnWwZaGhbe!$%D;Eqtyu6a% z<3?J)4p%31RB9=7=#ZNq+HlBilq;m6eQfNY^yrQ2(JQN=#cbLcUk;~lA))_4MSlq? zZ-_YSHuNFF$i$guTtv5fDL4phGrgY&*MgJo6Lrqlhf#|$MSg92qnIHC7Rf3KruNO5Nin#L2NrW+k^~;krut6M??uW+uLd8q z2MXp~RVt)rFau|9!SVPlT=SC2HYm~fK0B&S5ns}$cUjG?$fzOK`d33nbVz+Lyz01!$$2<GC;RX$5hva8>Q()dafIBM1^Jhry)x-l zETI%PPvq~XN8#%%Sh~TMb${AVKkdBwR#z`6ZmU(cml5|w2P2CzCSluEGNJw1*$Kyl zci|ek_B_LXT#uj7ZGL796|JVce5_4!>I_T}R*SDkfOO_)y11YWH^K$FpDZ~Jo7_{k z3=fD9$6x_2F@tM8!ke+tS{(~m0BO@|qDn=b6V_6v<@Qg3S|YQ3uAuP52ZzBRjrYNR zo2x$(%RPhL%OMJxir%q%_y?&UdzdR$C{g@zb^wvp`&n%&&-@!p(zZ~v14rNNw}j>+ z_|o*z0-K#@y9#+G$3zmS#$ftzeL?o#Qh~tQ7G}ZQ<)mdTVf2Mu8iYv_$=ojQ#!9}) zp}qqpeA$FOKSn!^1T#QuMC}b_V>z_fs#_BA2;>|Fc}og1%42xAX9!onCC`Vos@jI} z*j!VBg8CucQ3Hq?Zm**`SG~CfHY$>|C8i*h3MFmfaL2*>fk>qEGyf2~xgMh2@Lf|o z_c1QUQeKm7X!m!XVNWeF#%qn=VphBZBV zxrp(m@0ehlw^}E`a3KePg-l7C=JW5)B`APoZNxVU9LW~w-x`qJ)abO;_Hv-{tt@@?#V}W06!Mwk z+x`g29Ql+b6(G*A)N6VRPR)%|EG7C1c`SZxf@+oPKI=0Do~=2RkI)E|7L z_)TFs#RH71xkBJDbY)g3wQ-t00R>C4qJd{Z37?PfdwzW!bP8J+@QsUc=CE-N3^;v1Zds5W4_KyKfQ3k{S$FuvCIC&jK@p)K-G*@`o(Pki${a&7 zYf7r9J0%zj_2>h*P_KC*?jy?3Xq=+&K$+U&fxfnVkG<(94?n{tAVEd0j}Nm!y(rby zwLrobWmctB!9yo8`i}!Ek%On%=P0#_wJwa~Br|W?G+l1I5jjLV%AOyJ^Tpqw8GP?B zH1;RYFec-pg~@2|y?`-{yO<0eJi-}j+(1_3rt4Su-^U;g`xax6veB}2zW!q`wA-7v z0X8froDXX#D+HmRzp4WI$RI`<6O>TNTHg`=CKz%-#5~UjiQeueFrMI^cVLDQXPD++ ziLXJQQoWKY{QaTM@X%P;@wmF*o5_B5-FhDIfUd;;bKT`lyl%Qn5DhNY zAsxG44}iVw(LZ|zyNwwWhL-z}3SffCa23*Jd$Qw-p(uMKioQ3MWre~p$C`B~CPJ`q zX;dkct#Q_^NW22jPbG}+4byi640LsrBfjzSw=J>aGt+)Lb~CR|q;j8JTT{c7-pN*O zSdoa$T%@_Oj5N=SStr!$fc7(*?a8B0$=VsXg9lOjMg+%v`$^cC7o1Jvf9ikRRV5Aj zuH$)A?d{tx|LHMfoR2xPKBY_oJvnvO--}XP!cPLb>~8bHc<1PXpwB)E zu#zkcm_DrKK&e$3WD#kQq(jxTL(9N?X=iukLsD{`5Z@$VgstZ zJK&;m0~;Gxhgptkji64L2-^)grB_1>H2xDRnZh2y%xNoipeZw41D(7hSMZ8LF&h-N zJt{*x~`*K zfesRDtyb86QdsnOdfTqPhZ~M}k6I|`ovH2v5<;2U>dmj|>w8H+XjVeMo51R>HXP^o z6+vj5C|#*AKhGN`{y(fevwb5VqLc$Tp`BJP@!&^)(wq4%?@C#8>rXo6aE$BxB;Ubh-PhMPeJqN zx$p2|V8_?wiIC=Xa*Ki)8uVQ&^sX;^&3o8L;Mpf{jgYhfgw2HZ+C3+s=0x_3qoMB$ zVArZ6K%F0|Y75*yjm-?!LFrd!oGA(79L|b^XtlPYpmQi+>|dvS(1&)jDtQ9*-5mRc zHOBowh%m;0uFZx?C43caU%HGmoq|rz4-N5gdYO zTPV>NX`^fa8l6-*Bf52YgtRnGSpkGD+;B3D|4`8zY0C&ttZ_CO+T0qNR}(!+baQN2 z_=r2F`kUQgL|;28sInLW@Te9CzjZy7TSnsL)5_rNw5ZMtEbQ}yJpRXUdv}*NcjPB$R24(;?0@%cGQtcP z;JaLh0|L(CriEfNR{I)^UyAVK_!V>n=Y1Zs6C12`7G%i>Nm8j!fKtfM;W7Hy zlrSM}`ahitP*_K_^-p^uNzx- z$;2o#hZW=sn?#K{tY9|O$@%N<%ptE&%8zQ->8_WT)P*pddl_DfG6wWm^>8#M1V~&v z1EA&Yt?kR}iavolqlE7K|Hxi?EwMj?zI5ROg>Ih?QI@bw)Q>X!n;4(Ee4;2#3w zg4q-_7`3rf-7kd;8!$I!CmaNm^FbWWxgW_nbRhwt3>)B};(i|bJ1vHa4_K94z)jdL zaoxwXNdM*NAOiab<9>!@OmcJUCMX(({=(o}XPtoa!LqmHRP4Bg;w1A~Y&8Y7Hr7!f zG(#;G-6Q*j;35-jQC5 z--xqkZxTntpuMyS_uYY71mVStZezmow)brSq?GC|t}cW{h0>8k_13aj`ymPW6`-kl zFY)?dAE&%sz4|_SsqaEU!6$c>fGuiHsSexT1~q1h!S^{)_mNR>IUD3P#r^C#1a~Sx z30hVpann@qY~34Tq7UWfb>HI%zG?*^u7>fJ^yAI@S?T>G^05BA{d$A8a$_G@z3dtN zsC1R=hniwd%D@j$UV%&DQ2&q6tmbT%8{C3Am3~#il*GGBW_RexNG+7qh!6RP?Xs=BlC?Fm)=303_GRo(i(qN+Ddav$rO%s{0MCi^K{ z8Y#M6MF57RPC>j|1vnZD-wtNKLoE86B)e5%y@rmlyu!S+U==tAj>-XoS^yEjJHHkIC`9%x+Esbyu<@{nxbM;kVV1 z&X*3+z`qhsLKv2xPJ#af0Opc%9CV6qJruD4@b26A)?a|T#w53cID|0#{UUP-VCZqMuB{Ne=D0wbZ&gyr~*I;GeD$PTtvSV zkM^7PXXyD)Yoes~%R;K%qz36O6|xP3(;hn4>CHsTZ+QhijYQkZTsr!yH}-*npbnbS zK;UWm=Vikp3_>#+FF>1|2t9q#_eC^n40uVkP3-60JTJ1H*}vgmR4zGL{S8B)${@) z+YIR#UhaEo21`43#p6DVtFyy;e1Q-PJW^l=Vx7XNRbaUJI9%BV`-0Z*6q~!Mq*ZVi zp~zZE8&}4)d(Y22HITre@`1txy?VMy(CC%9VsR-;s^ZZNLi(nPzN}@mtGl6lYdISC zF*|_Md!1+cx$T-2sD@=y*ab32Nc&=Ox7MrP9EKU4reXVSN`Z$jT0g_p|8IY*Jh$>u zA4}h6=s5c~C2TgRC1tUb!9Nx<7SzTf}wqh}A+RqFa z-g~&=P{%|#)+IgxLEIt_e(!dad?bx-l~JoEB!Gv(!=wEC2NxWxj%V3Qkk2#jp-e8- zeFUx9KAQW~sAMobiLcJi;}hM0M!YcZVRH|zvf9lX5j05=*$2CLI=TIt`h{n%EJNYR(ql zvW@nT{rEN1 z3Cx^Pz4V3Yg=(iU73`*9!k_H#$sD{(K(x2+YMS!K*0A0WG%7W0Us|URcy-9Y2T>@T zdxL=M2P)lskaVecm?vZR?)O@zghndQr`L=BGO|$puu9|q=6%lgyx%IkrVq8r4bi!Y zi!%ljrR2W`yW?CoY&a^0uC#+y(h@{pm2DPL3bdx1J&8S7J(obj7`jvtF}>YBClL9( z4r}bQU2HxBB=a(M2m!vjl+;0K$By%t*r*E6Kg73&{)VnomJ1iA(_alK91q~DaaSEs zO-xPT5Z3nKozB7cX4g4qWcU`YTMN4b1OTd~SK@5EuUyxlYL8ZdfI(n|WIioz&VtTtX=grZtCh}g&TZ&E@t^||qz7w~^U>Tw3AiV5P^rZ^-NXYGHjr0< zVU26)RBNz0qe4GSt2)>?6W7Rba20v+hgM}r?53z${i=2(xq z6)g-Xr8o;m<&-;KyJ|8h$=&7Bd)Z1Wh>Q!KDS;~2rxyv|9Gdk!Wm=jH>X?yp}znV0--A2#B7&G$L z1N6X0@4vL~Rj^{#d_`P*(4R)j-Ubjo^v?eG8rZ^uwh++ZYM=w9*zSomY+_#YRA9=5gzJ-rG zaisY%`Ay9CZ;}$Ui8Pgy_O9|a3VY>+##P*&8`;!NFdM{5s?#L+C1t3sKMJfTf#GDb z8~F5(4u_XWq!F~e+i(x&o%sVTbi+s!=hyedK)ZYZ2aoU;`G2+AJ=hIO-LYlNpJV@3Ta1&G4nNWX z4v~ULA%F2&*!Y90xxk21P_z0-#!`y;K@YUd8P8beJ$Ppk7$%U?w?@exzg;%Y6j8{0rNY z*vE(Snfj@3Ge!d0F)0^c^q|kX3(?GiN6lj&brq@?$gNdiCKL7mPH`3NsK6IyFPmTmiKjN(M`}RNZ$3H>~tV zs|~$t6%rjZ_f$oLC$6WuOnDE^)HFw(Dz^wzD<~suX2Z@9%W)g1kuspt*>5@nkl?Ji z1(z6>b?7(HEVBpi#y|%TUB5OjnoMiM50wAb>u)bARc3?#5KUYDJyQN zB5ul{XYN1IbTBfpzYrdM_mMYycoaAm8j3#AA>Dc3sGxID8xK#l|4+qkXiAiKaJZzk zj5JIn@6CG<+>IoqX(bi;lC!Z6Si;|=8m^)GUSHm$)$R`zz>7-M88qJejZTt7j~Xowb@G|o2H>*69RUGlTGG!$mU#au*=qwM|ZAPld%v#E@h0p=QjZlD9DgL4FDM+x2G;iG^K#o(g`)@J70!p+^+4Y`CaiyJK?%{Y zbdBxvb${XEX7)87X{k+e{Z~B0=V|<&cDy#QHE8qEhjFQi8YX>)Ivy@xTA8^o$9ax#Z+iJps^+!o{x>7aI*5<8jS0c8k$05?k;U;t1M9CxaQ+p*9a{IHA2k|4Ta8{xTHG$53q$k zM*=7*i`;%ul^HFvK`Ly)7WhE{E;~no-16;NIFft--s48KmYD7$To+G6mtr}1h+fwH zF-K`H6JJh>X&uKqy>h7U4iK)I{QTG$$6dk(fz7|eQLB3{5ej>Nv(7P}u+`?=9Ooj2 zXFi`VsV&1_Op{4PfR(ls+m{vZr7bZ+f?f|_v2f+RoCX@!NO|eu3L4BvTL2rIMC0-| zFuS{D^?Xg5p{XSkS_!jDu3;Nhj|((3%4yt<0&mg%mb+!nnmahJ6ymallAAXA4_RGO zXZ5$W@uE5pY2!`_G?l`6)f9^jR?o9^U#^ZCl?=+tZp|mP>t&IN?LWb&G6i6CeLgxL zK5bB+bF52rR>u{nv2m*u+28UV-!fz4(vkRbkcsvncmTM6(V14ErWd(9;A z^3fr+XR`QeT1nShk}7xfz)(~v-=rxowjYkgo45~O-^lCNt~DU7&xn9m>&i=fj>d7J z(xtmDv`#VLCi+%$?0tA|ySmbGyI;bXQ+Z^|?r>L}n#R7ko^%>Y`4$x&UoF)9=Clbh zp`VnW9=$5a7vvmtC0-~mhC481(%y*@L_Gs~&a97X(4ksR@Jm}Vmz;cmoxz3m_|~-w z&EiMxNZ(G&N6Vr;0+xcCJ{Am&O52*U-I;~Z-R`pbN?q}ZjnJ?sv}T{J_A>jc0$^0?Kp<=@x0 zO)S2?lfmzSJ^*k}N>oYqGbX|WO)pxy9!OS6m>$9*E~edF1lF`DrKXmku!~Z9$0l8w zn5h4`EauKi$V?B4MM(0h_i(qqonN6n@$SI^S;}^%4)}BBq^XwZGw=K=E8) z`s5FTh$LYAZx{Alg3c&N|4X1y`L!WO)qo_@Cv{Yj8pvaZY6~@Y!K|owXKmHSvVb*UY{2(2@}^>Np#MpV%kJ(s_KKmcw%wyJhI{A6x}Yhxd}iJ z>OO#4NN~_p|EnkG{bragv zFF_xz_yP>mtD#he?u6Su+=_=)sH|8_xo+ZG5Amw&>QW%gaThB{0nB-)2Ocwk>b;xs zXnS6k!fA+djp9S;J2P->M1-uQDMYFIXyYf)atK$|WZuBJCHT_Wa>-cY5jYwA@Fh@6 zV-F{KBj)XZWh)eA1-yoVU5P+LQys?oiWE1Ii1E}FF}R+7jQgbx%iTA1cTVmHd8H?< ziw=UgT9~N2t{Ydq%wJFhRIrj-5jjEyQ`yl06NZ7-kd~)FdH2{;-8eggP~+d+x%-c} zG2IDRhuuO8eFFFd*#LCe)iEtWwC>>!w2s?rohr-$z9n7o&o^f#w(sA%wf^sK0`N8z zfXW;Yj-c(W+XS<=hNSwwuK^RTwcHdq^1wP^2PVeewRweYyBh9Dp-U!*fMmo@YKtKWF2zdk{-NB#+uom#{Xu}S^4ne>WR=}7RwF+9&nRBt{NJ4Mx3b+r zK$|X#b{#W5FULM_`|_x$_p@dco^=elg1VCi@nu=Seamt4f79*DmQU80uu}5XI>V>l zLoIN?2ft%Ib!@6e@Z#=Ds7}RR7+%m|<(tcxF)yf1OZl1;0&N=~gv%@%>Wy!Dj3+45 z%Y(IS4-}=r@xR~Il?fW{>tWDYx+r%PyrE~|xi{RsE`c7vb8cfoyJRi*po2DwRSQFT z!o3^2d`>&AWEL6VcT1}bQTP7|hjA15ClK38AcqvL0ubn^8F>U2aT2Zg409ISUX&Mq z^2zT>xZ|vJ#wawo9{&@+H5-!)M9t?mg7Ej_@ud;!>gslQp=W=bXUdF`_|ac2e?K&= zJ8MQlD7?~6rPdY$#aXtcF}<_N-2=m8{@wyEL~g2XW0}hh3x!yhBL2I=6qd%4Qz68h ze68O#glj;o>7mGRL*_6h5w)th#W!n90*2-UD0Z`}JMk_(DkP-#Xa%^VH*Ke9Nci}T z&#GK^a%#qU9W;!jiEy34{>ICR?W?jXp~|ht^H8;DcGW zZr$1Gyi|Yu0~n6*@R$5QC}!-3B(p)qEFToJ_Amkp@OZte2|G(bZBv_?c@`ZOx^X3! z0~a@`>~@yft}+|(cnJGJB$O_>mBRXL0bG5R4v;^wXpMv7QA2@qEqzER!O<^>u74t0 zZD@;Yx`ucDh%+tmFz8E;tEpWi2#BP8Vl-id4I35JuE?@)R2z3B)u(i82&*aP&RO-z zj(b2-wsi?;gA4%vM_x+B5r#PLI_l?R+#PZuFB#Eo??VZP3YGs=*Z^h5o%cDB= zYHNvHS_KCH`h`feI#DD#eCy0g8sbOb-F*0^5dE)3e^_a()`S1M{S^|{omL2}nT3vq zSW*L$N#6=`W6zB%E8;rGk(LgE!g*QN=0Ez%V%HJ15!4O*hcu5lkADMAw(s(-c=2VT zujVV^;qc?1DmiX}-M%}d8K|oKri6T|G*+y9da}sg67Sw%&lPO7m6X|(cSXh83|HrI zW8N&Bcig^jJRDXY4fU56Xm{6;t;^^;u>Omcg{n8>9a}yW8cDAE#fyrPHrLC|d(}X$ zk>mn{*gQ!<`$1Dp#f1wafpHKI;L$9zc{L%naHMJs$aL1b8HM)q8sb8d*j%P;QP7v< zP)*r)Nn!ORdOZjm4sOjO9VbFUrs3$v@?%r6n}2tx8q2pX(4Lepxju*J0wXELF99mF zCmTLcW35tK$ui2E9}jFTE|lIxz+*DkhDSG@Bm~wjg(C-|>+rPsf+WY0kocDke*B)0 z(wt&Qodcl38@5<)8HedINaJcn?=L(mjWp%QCfDVX=EZ_U+j^6fPI6r5IqckD_n*ag zlG?MCww#jod2{ZRD;q_stP=BFxjs(NlcG*+K6hmf(Ojei>gG9_Lnq{jaU(FsqLy3( zDpwJy%7_8Gunvv>8z+$9+gb?ouOJoRnV3{U8KgQtWnsT zx$D;vmj%?mFdOFnIwPR?8zLj>a{1I*QXdCpUP~9sbp@+|xNN_cCO%iY`q>Tb2U>su zrPM}FuB|)hR<$Il8LxKK&^;pRG(-Bp@EvHcYGE6EsU|5-R&ddG+dUhIe@8)`{I2ZMBE5c(b5zMEw-As>_jL^47Dr`zEhlb#>7RNV4g%NfT750TkHOYuZkM3Vi zxaE=5@{T?qRm+-KTLzHSs$wM83%Hmaoa0Ijw7J)T-l)Z$(0GoYB(k+)yEAnjId+fo zAV4xqa=`qmK_h9XjZ3V+H3WO)<{b)`II2w@IB0zg( za-0&f2sV7VZRqZbq4qBh8z7v~48U*-K0MHa^pWoVK#-N*g#ocXU($@E6?2rAa>%D$ z?2wTt>{8fH#@eqdpt(Aw54CQyma;?{vD9UgG&_kn3&!MIXPM#~WuzfnYP5+PVWkZ| z49yN%(LRl)zMMmRdL&Cm|rAqHbpQS%oTBcx3U{n8obriTsg2lbf>xK+w@T* zi3KqoC8WWFZ+L}Om{l${R8e)#P_6WCmAKV8pp^0)b==$Hv-!mJ)soX5V%?nL`V!L; z^Km}qG1+F0mB>`)ViN&?3;;DxB&iiK^gR9#Uz=@Y%B8=wg(&Y%BpQ%ZhYMoJ-tw4_ z!5lv2Z&9TlQec+%5UZ7@$P!yf+zb-j+s#ryo{s`z>I|6lLk4EOvZy2%(+!_^%Ux)rw+ zm7Jc<-PH1z6Zmbh9}rs1CNUWyg8bbv0?KBV2X2vB&LufM< zj0h4j#CKO&_H)n}lqBxSC_bO#smI`YKQ~vX>NWP)SVn4I3R;>I0Qf-Aifdl@V(D9jJ3sF&la&@$K-nk9?~o zMA>8$H)tHqk;P}jl~_q=Xs{3oOBh`976I;xnhgX$`NvIXqSMk)1C(|9C70*hbx;fb zf(kBnO&NqU6&W%43Tzje(8TTb$Zg1{G=xt+Blx{BtPj%e$tctq$l}FPcpPCKj}#ZJJ%x} z%TIcepY$X@=}CUlll-J7`AJVQ1{q+hfdYD?Y)^WUpY$X@=}9&}=}CUlll-J7d7yFm zf7z3q20h8pmF!V6;{U!C`Hffd)02F0-*VO1{7c>5AFyMgT19Y2MVYxuyBDbiN<|Y( zddJ&o#VeFk>*WBL(OKmBE`VQSECU$yVuz(-8@-fTEw(*iVM_tJiG)J$?;JI5W)?t= zaR}(xv8jXw7zwx`)=?pdwsa`F{IsVGbt<}7E4i9RuCKZYC{a@_;1IZw2KoEG)DZzh zp3qV=WXDw4?+WZSEhP59<$%j4(py0y#_@jH!NcWI+6?eC{FhOz-H(4yw5C^t5IHw_{3kE2V~gA@p1Z_o zF01z}wk#%xnM5*^q|%hEj&OG#HhAbxfQcP@=&V34uOzL8aLTMAE)u7yYmaq@ZqoLi z;_Jtg`uBvkMW*^B{bD5*9)GIsz^+|Ey2i9Rh*U-E^(u1@&#uHpL($e_EZ`!WcS6gA z)~u6B$^`U2el%pd_6ho)q3*CKk&P8=Tr%z}-;)pSV) zv#SjZm$$))nGEfxt=J6LbM4ip;Setg!#W)6XGv`LUbNtS5VG1vU)* zz~vTXw{<~8-6v3z&>E479cs)l`<{@1kmH!DA3=1f;_kjHuw%0lm@O9*`g~>kdyqJD zK!F|v#V!2zC#B(g*}*$zS}3YOyRYKNM^>~*pB~dvqHHxNHRpC@%BXWmPS8Ks)}%IP z326)0+%4FAI6|_|>300%Ylp6M64 zhK&!N=~v`Mz0l}E&E+~C{rz7uOiPTPfzK4}**$6;A;sQn%x(gYJoa82vHg^8WziHq z=eabzIC~n=Qqn+I6y?PG3)tgPO8R!vU?^JZ;r2qeQb1h_PvUgpQxW1Y6y2R+VU8>P7R zZne0>B(=h^eaW>q2x3w`(o6+VvlCo}qw*fntyUm;lh%2J4$vk^$s2kf`^GuH4#fXx zy`}qI*tQnFJ+iT{;SO7sS?~TsvMotkg1e{Pq_zmU*^hrON5)l4Z>$JoitEZsZs$uo zS|F0O2K+Uvt=_kb^a|kbc3Uh zwOApeAakk*DnSWUcnVrhv!r0+J}jr|RFVt;gYYQyrEF9n@$OoWB~X2Ht7CjtS!I?n z0vkXj*4|y1qebKL5s2p$@aP_O3B+#Uq<_2_70B{*iON=-U($YHab8jPI9y@ED7KfA zQwNTwpff_+A`-N(Y-ofu845EM@XeH#BwF%{vUw7IR{&=T9OD;wgf_G#NjpORN=`*2~R53JiM{J@S;NT%V$)fyMQ6$GwG8N12#H(l;jPO@!fV)L0G8r^~-d zPG#AT=381-VlB427H^PhbsNq*x|N188?3zvS!I7R6DsQ=2y5G_c7*)dx~VO+iL0u> zfw7funWnZKj%iv7!&?WxakhF`a#@mSYg$a_g*6}H_rmg$x`)tfEmEQJ3#gTYin+5> zT)BoFTC2N&I;3?lgb9F7K27zw#q_REO%mrv0OTmXHN_6l^!C4;P&vM0QQyRF&UYR@ zw)8vcL{sJFJb|u_Yi;1_0&w?QCy!`aP0c#QHSbW-7qsTqh?JcR-5dI%)q%-nME?=J zJ{by79DAJYC=lj93smF{M~U9!d`l6&yiEPIOlv))vK|mp1y#viXvbA&X#NkD{dSqS zxu{-TexgphPtf&@vbiJ1YLj*v{PolLmPnkAcsQ}!N7g-b;t}_4y#r_7gD2i(XF1IO zn;LQ|v~#P)XOqO2R!f>Z z7^eS+z4s1l`t1Au&5|XC6~d0zLDg!s4pc_8)>7-O)Oz)zRUuk0YwL=L%1pjkFH5ae zw6vbB2+`U~EfpL^l#zf|sUqS+L`K+%j4ZOp_xYRwtajYb{XEBgAHU}~e*RIbA!O$q zpY!v6y&6ql0PlfMhYxRQp1Cc;dOR*MJL1yT<}BzhFX=YocK0yz6=@fAvR7=881CR? zpF?r`N|7Fhf}KaMVPL(XxXN@jE}lq@NbW+Sl9Cd2>qY8cwT70|6$!^HuvDg?UiBV) zCCrzD3T6o}2PVsGV-og=$w1fuOpYKVY_b!zgAj^YaxYkTV~>;0FCf|o`PatJ^q}p^ z;Tpf=6Ofb*YQim~yP)&`W2UtIaQU{{Kv4@b8QNr$?RCuI*7( zP6`;b8>GOq(btMC=Y>4-JJ4p}Im&QK{D}Jlm?2jcZkIt~O=%u+<%wde?$^ED@qj)b zf`E&zoS7R^9~#p#_i3h?2t_GhIKE0quVWk)pq^wcLs)Jbqx;+dQp)M14Of*ifaV4W z6efZj(ss7atWmsHqJpfaN!Zxgpz07vzNy?&)R`3_l<7|Yu=Rb}4y>f*mL|_C+A^z^ ze>biHyyO+Mo9oYae>nZ=qsU>vUx{zfoI7rl=Kfzk6qtfh&Ukm8Vy3%CI$-D%= zz~~?OW{@&v7nr}=bbatHEWFo1>_z4u4)5M{UE22eqv}`x{P@`$5`MXL*t{6nZzx@fnhG&sY-3C> z+r>tTpX>r{Dn?JHVzaFO9;j?GgX-gr4YJN9c|}$abms$S7I+)WW;uHxmoPR1{rV2o zkGo4sf-wPeAhul+Jsh(o@q9s|W^MTeyk*i(=PB#DHSxxNC0^CnK6<1_hteJ0X^UD! zXtXyCV1!zho1H{p{35$SgVMAt-Z(z#%vV;CZ80WOYEn{ao@xU(q3*PO z(yJS0no-(e1{ZPOXUwCP{D#i@*n5Kd@$8!vw!L%Xu72{7y>y?en|1} zk!(br=^TirZgTPRw9{V@7`w7V+i&@939gGXhrJ&K@J9(!ImWR{9 zQId>~ix}?2*cj;`-pf)3Upo0kiv;hmAXZocF-&Lk6w?LNd8&V6OvV6%OJ*vOuFjupL|YQv8;68uJavChJ>II}xEECq$qBEr)W2uvv z$Ynm=n-0%FczB$XCpuc|HU$weE^K$jpKZ%%{$h$3-FFtUAXkN(HvrS7We@j4E4R7$ zU;r1JVnp-qII(C>0ZnMy51{%MRI}K0m>fFM=hZA8y{K=t2{E_1Oh;AIM)=yWTxiAv z)>x{s2JQOV(F=WdgyBX9I;$3iO&U3tdV_|hf!dL7wF<;&G-ISE1FJNRXyjqX*N|lu zV*>5d%5_)}?S*C|7e9Q1Q;|~c=1KVkx$@}lubRQ>pb9!&(~2D=fywtHd9X2mTxi7U z)>7bIX|f69MiTUj%3Hx=urpe+kYYF8YeHXP_XHjwVrDEEvsKp+VS$zZanLHNo<(1E zUEWhfpxs9t$D!EQ-FzrK)cgUm_|4C`m65)4mIPFddEv#p=q}NyU1mm}~x&vs>5tpe%p7k6D_UT(l z3CFamPlxs1ps!5pq%?M08qJX+W!iIkaAv||h-ycI^+xgpw&&rZj(srA7xq3#3R9Fw zn#P1_Gp!1pRf_}LA*H^>%1M?-T=IIFr5e#e zRBV*=q=uQ-HY&TNPr^~edsL1iMB-d^CR|ZLDe!Cd0TAVuN6pnEMX+;lD6i#CL9#YG zx#CZ>unN)84FX12@~@=ztz8i%-3uCZ`@&SMG6SxYA%C@-4}Ak6e~cP7ICF_Vkjlkc zrA!Zr_V|FNl16zY(at6xXBAZeo2!2^N4-d{J(${9IzS!IkwDHHzfzFXhTXEA0Xk0EUVdE!Q;e9+>8>1>a!+ zaCj;@-purz9Ss3#+H<6)_b2RGKdoxx*=emJC@&R+w)VvUNTD&tBrMIZ$ponF!*ucX zI+V8n08(Qkk@6J7@735^;7!p&{*nbXjo%M!q|R&*u@|v%xh*TXZ!s2D!fsxI_! z1B1h`d==xh3z;`C0_`vH!ORE$*=&1`iDntk9|HC9DX8?8qvs@`7c^?~`DDAu0H1}f zh$8j6XzQKqrJUz;jD=75U5FCH_8JSi*0m{`#Gb;$K1md&gio3DgW{Ergvql$tQRCD zwE{>z6piIMziLwqQYh(@|22WOr|ol;^1#U#eY%0crB|&=YC$P0fp$9Qq@(k)zKa9W z_X`(hr3kFK5mB3Na-$!b9y1N9?%brQFBne$?F^@}{}qPQ|FaaUBw~erdXBc z!I#NVC^Pxd3IZzw9!Whg>0p~IHS zzTed{n`x_}; zz%jnVOuW4>69@@8k|%Y8Zf5cW`!khbGkbGj-SXoQ{pdesX9p|>1kfOnd&>1$+=o-Y zNVThQ4~zp&QN!-sJRn0`$F6bivR-13$$aP?;KWIR;CilG_lbpO|*3Z?@6yg zx)gDbu_lg=KmL>wZUGtFc45QAZ`7PMUe`(%r($t5(9!q0yhAnlqsbE(J_PJ%+9*RT zCMB+$fLRScke^2~<06h;JYb3{+E05@G>!&@JNlR|yky#bxs((?(t3|&ZeZVrJT(wxnkZq_y#zT6H6mm%4h>IBpu zU}Y}>DEajRc8?1a;gBm}was+)*=x4n7~pFUl82aEd-R^%BTow?nD~88Y&w6CknH{Y=lF*3zXZ0= zC!O1|zAgnnwC}o1xx8BCumO5Fpork1GnPHJ{l?QrfH~cEvv>B4fJfCGA(rfA&$kss zrkGBNjZfs(zKE~;0W^7NmA$Rrppp8b0}58rA`HXkb64ipj3En6}MK$)M-b` zOcvP(`95g$Ck|6l<*QIii2fIvKMly-F1IOO_QM7JZxPn)G&KK`=P24(@H56NaR!O- zo{?-Qf{aOboQK|gjruYbIBwI9(L4~D?(tXNG~&yPGMTwL9oE5C%rOI7gbdE$iyMMV z8Z|*jhugL<_juNoxJ+_$T2mfr46^Feh@Av^8E67J0La8Yyb}GX$;LdvyEiT}F_Ruv z6xU`5f5Y530)*n4H5{$;m(~t}s2hp8>Y_=FOpVX0v^rmIPj4pib!0*gUU2?ijySWz z--1$TBd5-jk|r5^)2-U}ZR8qe(zp1G&H!A2hoJvu$$)m?r^f&nnIV&7_$*C-GB;!B zYaK?%v@CS!GM()?NUAz{iUO36z5>EhC6{#fpw$|?vDB~aP|R#kZ>q(DwyXh2_0b4t zs2p@UvfbmCN>xt8Sfxp-t`RE^@uwfShvt7r^P)LtRG?|6Sw85}yHp>v#mw@eXwab% z3^vqx01wWhF_>G?**i{b+WUFsXj!hEhnM2KL_O4R02<%czGBO!(|b&zC~BLF7dtn& z%7WoLGiEmR!C$p`q#-KqDBPGC7}|}g4!$TN#>H#AKOB*l>dfzKbO0u`xx?Ms{2({) z4j7&&r^wUn8>bfdeXm1k{_h`-EPyIpLU&*S}G!geM8) z&q%;8%9^08wGt*A-s7j2bW8dch??0F1Dqnq<$-7w^U3>xoOzw6-yLUxl0yro0u%M+ zLY;4MS&{|5Znc0ahGvd5z8MhFcQKRGm?cjz60n!kLwcY)OaCh`0X(f4@U1EUEV8vW zm1kZj>n;iChkY7Du0J6Db)c3@CcRmo1~u8`7L`2NpIdr5LTWnCYhU?XH2@#{o1hir zkl3Wjds1jz%p+6z>UF&SW{&y*pL~~R9K%yDEI)vl8=Sp{M>V$Yhf3|_<<36Ce=HA) zm)}Kq-lMvsb<3S6u5g7q$e(T>R~uGopWfBCG<&zXqNV2$Fs;tEd<8)TX~IC-jezHTz1nllxXB|t|wCg4|ZgT>JXQl#!+XI3Z|6Q@X6ymU2J!5 zH_?S8y&EMRG=O|dK?Y&HB5Dio3*Omt6AEj=4ZyXMXg880;_C_;5>n&z-^V4Oh*l9k z4O3#kJpPboh9p=(-^GM;KM7$1OZw*^U66DaWjWTzl&3=hkfWh+6zzm6kQb-z>6K}s zA{aohk*eTmu2s~rek42+SqBvKKxUg}x+qTsy0sOmb(1kH7d&MK6-PZyW;mEyOh*8V z6V}xvSK3)0re(?i1=gQU_NFHPwpiE}E~=O$B~&Yualvqq*F8)D_so)MH*<9G-E5Tc zNFb?F2vdQy1l-%TX{7!tJOi=*r@TaxV=gONnpJEKBGh)k$B|ipkT1ytB7gji<<=J9 zgzbdFnOOS<29MpK6$2CBikIp2@DlC9)LdT2T8WxJnwj8$KT;}xzUEyyIfl1Qc6RN0 z>`DX94p)oI*|s?lMuMD>QfT~`-Gu8bS@$*vLpoQ|zK`->~~{pSyK_9I>k%hPQ^z&6^M=(MQF zs)m9Ji}C$(3o1M5=tFNMtzAgf!g`%Sz7-yxgqjw*dcFo|xHq0Rn7u#2zv{!R@(<2d zS}qhs;Fs=N%;Q4qf#59rRZ!20$ShP|kFf6h*k@z!t*nyF3N*C@s{6R!jRXgsS)L$l z5VugKM9swwLhxJk5aXS^e#E@(=}W!74pl6r`_A0Ctrl({>Qhjc#t65Z>gHsL0VaZt zcsQRS7EnO4MVxd$wE`l^uV$W%8^82#0O6s)x~KeH6AmYr!EtuFZW9ClcLtsDaUUIK zZeo*a9{EG{ldWMgX#O$h!}o(@JjOKsR3qw*v%rGtLN?DLu(b}|Kjk~93?e3d0-qcs zHnDm5G|aicFgNMUD!E0=#~$^7)z;qVmLCExpw$&_3(yt`i;e!Vg)yEnW67#n2T+XO zaX!1hTuR1aes=;W4Eg49oPTcYD!ifodMd+%atxgvP4k#u!+opeZzXO?#v|^3P{>^a zWbo9{3@@UpDo6TYaawEt5&k3L zQqToa8&w0-`k_1puqzWQ+RLEtDwTYaC#nH)hc2cTtscYheE+~_uqu!n;7Fnzv;;<2 zmu|fOXh*{ropAhV`Is=5^Gv|*W7P1;+o@swKU|BMd=(FNY;L0(mIsxkGxo#lxN$;& z;Ws3WS7yOlL@@k8_qag=+k(jWJwX&0tR;FlCUlj`HKWt+E zilW>MB~Z_k!g|4ClS({Jm4FMo6Z|$mVAQrJeKKS4Cf5UEdbmho#{=z~yj%nnLDw@0 zlIV_g(HuP-*R%x7lkdXnXMHksgYA6%@BMMI`VcL2XN2Wc-{~#jHDdwm&?jmdX4az7 z$6Wr$^=bA)`ZQF2nKc?UY-9Kg=RNT+l&FyWQ=ZM7cbyJv{eP$KjyF6FMPGEUHLRd$0(ml>Bbv zilWbqZwUHrt7Ho@^e|mtJ(&@p$(0+wt%|?KORhyFMiTMA0rQG8GKBZhb zYVsKFhXh@Ac7&|^@kfMTBxn}EzVy@$=lbcI{DL^3Ir}E0XpA4_&kcbJ3Os-z1U7T) z_Fs4ha-bte5wZzJ=kim_gWjO)f}eKjJkziPdb@w7rWOS*T~!XK@uyul;o+v%i*pIM z-KsA9fw9>~pe+g;D{%A9u;2T5o<(|tb7E&h^4hf-Akg~@VmCJE!Mer-_|M)r19*o9 zn|zG2H(ErvbARJNwP~o>MA+PL|83PKo8b<(4=ucBD_s@a+x&8?w99$gI+tGv48>(jyy+NyIG2<70DHxwNT__u(YJ*k}nBD3zU9h4`SPH!D-<+WT zaz7aCM2)%{sDjzreVAv?o^`G(9`+8vy4^ux_pGk&ugYNFf2xB$TL$w&HxnIv(3g+h zSZLZv%IXl@tMKy51FgTR(7aPIu`g9WE4tB5OIxSa#%FLE?!^idh4%Z~f0)-&1n>R|CqCrH!dPuTc6+YV_G$VrZ(BVMBoGg`7U2Y;~5t7cj_`b z!+I>zwn-A}3Fsi|i44Sqv7og4#zblB9yG#Y>(qh2jBD1O#3w zxdZw>WO{$G`F5(z{>{Q)k`y|^^cBZY#+TKF>T@}NasQ}tA=P^ho7?xFy`X&J%C~=f zF}arAG6Q%d-f{MMwZ682nM868pXZT}EtYoNK9Z~n64syKm{vd63-Wjgza962h>*)! zI}gIx6JdFda#$?ynJjTM*w}6W_m>~KhaqkJ-p&Pr z{v(_}G=;xrF|mCt4f7N5NvZ*0yNWpfWh}3D$zSLoFBbS5D9J?7z?31FRm>dsxr1*B^aKCSWk>1y5 zoxLe@Z19y^P}H)G`CXU4}3-Iya)m7M9Py%&tKY z@vwHy$X`*hxuEe1?cu6rMVDzIk4M)Ks`bS+dziuuzW!So`GXix?|R^jb;c1VK0dPZ zz-DV{9QjU$n_k1W+^dPtL}ad1in`-$}L!^55&1|PVnc|F1T=Hy=3Wm8yAqrxDA6ZD6lzL%Fe_{+M-Bw2F)rp1DLSe6(ENb`B9&%Oy7}LXCfYSD0CS zQypJj6Msr<>XMm0sWRTO^?s2qh}^a|)(Rnp zj$zPQsQot<=;?0=^zPr_^V-DFWQ@`7F1A)^gyrZs&CZJ|ODotAO&v{Ta7!yBW^`wf zmp3X~O>LzLMxmlyS3h*H(QX9VbA$ELL~_ca^9fb4*rPyxX*+z|_dU3DMYaRKMOYrt zZ956Hjze4LJNZr#g4YBNO<{Z92S+T$_OoVnY*M`P<%jC53T!;tH}CGIM)fCyCxs8u zAvu_GhT$Kh(W%3|T|6e@4>ZXPl5OkdS|8M)v+vun;cP=XFMW-5HM;FhSy0fp)qc_Z z0?{k>b7v32j$MQPwncqpMS4ojD0F%fEwG>|oVofn^!72B{9j;@|BqOHn+^Bk;`c>F z=ausfFpiZMnA>8GUW5qP&?zNYZ-%ZCZvFZh@o-hdN#2v)(iVI!&TFAb`*WoIc5+Az zF`;?i94OFy$|+ivYlt+$sY-f5;+3?hDK+V35*AIvb44HDciZCChz-Lk^QzfI*WNU# zrm|60&4UKEF4R!s;qO4|U>Jaje*s!^l0_ipn-otpYKF6&$JW{c;k^i6?}WIGcfhhBr%9A7xHX0FC6k70HSPxkP#pQGHOaOL+SC_&fDG z%F&El6u%LW@05Y00)yo-`0}59>>Z z6T`-~uP^q1w6&zFDEU^WNNGm`Z|cb&b&^c8K+LFz=&_va6YH>O6^zxuYh;oGiS*$* z)32cKKCg>1+YV?0iT)s|2IBSWMeUQqG_BHRILVe9(Yp<9F7r;Gz8Wd)Vp@NzO1=Zw zLfrSb1Nt5%+Ld9H__`p&zvJR-Y6y%C{HxwUoAfZ>GJ`a6Ye~TkhS5?g<-%KR)!Sj;%!Q2ICL$< zzAuZzT@Q@qwp{VNnrfUpe(ABT(ZL*Eq&%`Q{&=)uTy%>iOs?LNpbp~S{ICErM%mDW z`rw_5Kg$at|8khUIxHh9C_~AGPP~&F^V%sL=WBPIA7l;T7ElJxINh{8l)3+R4<%S= zd;@WRqxep2KR1|kJ|^!J68_|u1OK#pY)X*v%Lj>PQ5yN4Vd=;J!yRq@oEb=6s4bYg zlJ3s%v91S0{Ge_6*_bwOc)=kIZ}YU2&w;iO{EkAtdGH#f|M}yMZ4|CGJF&IKh@;cb zhP35Ifs-P2bdD#W@Iz*G4LwDQu~1DA6jBH<^FY%0ku0EpaZ$~x#YCC1=RQ{v>N zIS1UyF+=U8Kf(AVgy)}|f|HkIF#FC-NcCImU%*7|EkD6qP#h7-s$4lkC8l>K9f3P7#bf!H}S8DtzA{tK6x|%$cV1H z?BvI()`sO-s`FA)QCxkJd}d&T=yFnV`Ta+6WPMd=|21C%Cy(21-3lzJNy1PG>&Umxfv!ps`|L=wDswq62tNt-u_*ikrp=jp`2TJQH08aYhoI?Nk2%7)m7QjW%uM4S^5FJJnqbeO zDA4VfDC}tvxzz!@QYySuPe6pcqq4DQ!A02~r#PZBPNc%gR(MHc2V*2Zi6Wt@;M?<##OyqP-V&sBx;%X?6~{tEdRcwd{r zW1p2+?hnsHs>p{3a?sH^>R`fv1ZoHIYEvAk;>xsuOU}#EzrKjCgonNW@{Zv-=pdKs zL#0^J=6Q4<*Ce8uJ*z{_x3ognVj3CWghtMzdj*pkcd>pvWOAk2K;qmqF>wd@$>qZ8 z$e7xw&RZq7>vG%Z|iqGh1GIhl&?HHaSCn7=Rk2f+TqU2EA zy)!mXDeBIR#Z8exOPnv7ZpBJ1-9+PxFm(K?otNXhfd*zmUza{F%aay9z^j`_4+y@% zK(6!LCL`jc^UGe7m|JV2A}n2E>m!_}E>_{)Pcq30&##&!g(wrf=0VFgX?pWW^`S3w{*4DaI(f#26KyOQ3Sq`d?DxI`W zJd+7nhcJE4%XD;uH(}H<51-+A))m~!SR{GbA;(Zrt-F;zk zeGnqJ)DsTSSSG4iC?yYZ67bi%ACOD{hi4e>B7tw)FQC@l1HhT}A9dIegU;W!oLFQ7M3 zhYd^Lb&cy0qP@zw9Bce4!q5z1rXc+Zp7C20;^^=STKR99CuJDg`iqkY;5?} zKHjiHKUt>I)kK?`@b@{X#hv_h7OD#H@I>Ti&g@w@?AG}gSE7$dz8hH5*WBC(@3@@T zvxa-+=^Xmqcj;$;WU=AxE>Qts%Uue*I}e=2PJoZcP1L+%gy*`g()IO;RXc)?K6-eR zh9UZx+C05aw=GZM)zo%s?Ys;hT~dBc@+rvp39L`V0{JGbP&XI))LLg-?gH1dsJJrw zG`Nu#XLPQ)xlUKVBS5cD({Je0u?eF-C_X*1WljS+n+SpQiQhSnrr4oF91lPAU6&_| z$SQ}<(>tY;BoFrq>mn@ocL@65NUa!$YKJ!}zUF&hY`*Ee`sm5>P)irHM0qWBAJL`OXe-FgKVu(mZ^WLQIqYh6&%D0BQqoz0M8yN%SwgW#h0#Na*PAp=Wu3kN( z377~oFUk1kt9iv`zQsYP;m;{z9B3YvmfTiB3zC^XTJ3fCnO}r}I0vGs&l2O{Q!J<7 z5=%FR$=-Vf(6~b&78YJB-i{MhRGIP2gseUcK6>~H>s3deVgDY4rJ>O4ZoY^+nYEgr z%o`xWO%v0^W{6pK!_+D!M{`t1xTbSFQ<2ofkSYBy?CRa`9MFX4WVvMz-z)o6js{*~ zAC&p9mSXKl6@8SnwzbiTEiyrr{A&R6Uy|+PnVY5ksYLw6Ra>Tb;t^SehjOmz$8d@e zVnBgAccw@Ui;r_2H9owkySztc-6y@M=_`_U!`E)>rTSH`hy}XYY%|k&d&F{JNVLA~&*LbzU`|J_Nv{mZD>u z+&s}gHnG+?9jJI~Ldd>^XrXi%+UMgw%AFQsZsw|CzAd>on8XMlSnMu5V>_L{@!$)%|$@hXRl^>if0c<_azsq8)PQx%J%U|Jt zt1|=UH>nmtoC|C@a8C-aKqx)eP^HV%b&dzCM`JBG8P;;K`URB>L){JDmPdj0C?B1Mu2kTj+| zP|1jxQ$^^`z2RPC0sNPO*HB6Q`$GSf@Cz)z%!g!#N~sx?AXjs9fUCGW9_<>%0C-O8 zh>=utF={^L=s68vu8;FA&-cLJ4t{Zb6~>m+T4yUlqBZZzKD-p7|AZT#3P95c64KN= zhoLE_9lZlA(Uxl27Qa-1@no7AkGYT!W=bvE@~RJ=vdV2S;n}e2Ax^~jNxCw^R4{a` zmjE%utgYk7bWTk;o+;~X2RWvp}GJlxLYQ(Cw620sfK+kd!>d2VCt;m~RR4e)hK7a#)g)kMk^#vW2ZdlB$)G z_OquaKR217w{MQ{M&SzqwCnsTP<4pc0cEt{Rn}xGgj!bzI3C7{tFmpwdx;DkbgO=MZL&vVN{D)tZT?xNu`ccgL6MpFKKz0A5`_S=w zhAL;We7usTB$*0Gz0A_Uv1G{&zhIPoZGFf!^p%(uiO!61{J_OfMIP;p=@jZR=fr#` zpBtSn-!f|cYOiwBlvNi2!H^*OXSb%WtZYa2QsryTt?{sE#Q<~N%F{JPc6K$HbFac4 zuHaybR8g^Qh|+B#R0SWMW`0ebXxsf6$+rIjFdTT`qnry8ma`U8-6$CJJ~Xq!mY5t< za29U`k&Bk*=%lvA376uiAsW30hS{Jmm~Kqsn`c_n<5SZ6M4qTJ9P*05{75XVvMas{I8XB_j_LFRRjD7>M<~y>VELY-?hP56;Q> zx-R_Wujs{S#ZM!gQ0z;d9&b5y>LkVr5$qj|*K^vBR7h05JmA&Hlb*xmd>Lk1E@^)b z&iZ{|y>=*2r^V3S!>&%A48FOmRf>-HyLl5pm%G^WAX^5UAJydN&@|XQf-mG)&&vBX zkR0QZZ>0%uxC@9@=qJPR7t0~B;X9z?@hyPj0ftpu^|s1&9Mv+pVhLZpmZzG|-`=Bt z01+egE`a`UlyEyA3N%lKDHad$d)Bi40=4tQSBMu$Wv#J%z*SDQ7A-mlbU@+%7O49Z zIsP300^Hds@*3RLXvBM$t&IZJOqp3JR|N>@e*Qlr*G!ftiuk9q zH&HKdPP^CzIkk^Bl-e>;fN~Atg{S7gSxNy3rVxExJgOlcE$=f+z~F%GQ{pX48wn-7Z(-N2MDlIk*&D}x9#1}ak?mV#@AwnaLCSB=L2 z!<67HQl=f`(E@J9o=b0*_)-_XftIy1-$j#dx_N$>Sy_nhY;qbf&d;SKD^X&+EUq+1 zVq6U7ghh#vFTE7MM$Q&#b-QAYrpOIiF_|gT@8cLH{M!0eAy3XSTjmILz$WI9WipFG zN8W(!CeWS*Z6eFhG^?Iz-6Fp`8pYhF`A|#VMEoYU-_wC_7Rp-T?9C~i1d1f<9gewS zv9$ighv)mIajgf-N!YhFf6Z|!Mr9K{*z|f~Q7NLF_i$$e6+l7@Aej-Q1pM7QQQ=^~q|pytNm*4fHowq$e;9=h~#zriKX zEv+Igyn{GJEq%-OD}S1HXvIC(gW`msY9sbkC-4WL-6)_6S+?BvHVr=gyf>a7*r6DCVMXrBjUlCw8rrZ<^;*M@ z@>-mrE8N=bMsBfj5v5mfqUh;tH4wY!>zYzmk>dr{pGE^CZFNrdnvL!lZ6I6Gx~H%^ zHxSAuL^%{})bgFS3uVoZKa%DTrZdS6PiKscHj4vb34u=Nh3HbZaW;_yi>VOG4EunR zpWFSUPFm3&s#;bsfGecqji4>K#9|DS=`yA9x~R^=T#2QqxDl`Xa6a4J@Xf|z&N zA?kcbxy33_o(Zp~o6+VS_7l)?DUcFx7txuXX^H*2FXH$y9wRPk3zr8j?cFLx6g$V4 zCe#&Q=?+oGR6UgO>g$4&~p|pEUuW?`#YlWrSdY#V3R=j^A`cMU|TTB>>k12LG z(gZr>$70Wnk;3w|3TEMzVI7+rJ5GoJBlk?r4{AbxF74T+A3DmWwHgd4>MKX~>~Vb6 z7OwhLKv@F*r4)!-5mrpF1Cmxjh*e3Lr}NY^yEQ5xHo$_5H^|?!_SzS~B>x2k*`?6u z*qzSbS{oXdi6qBp<0zp1$g}f0{1wxM^)hAE>;fIA^70841l2#!Q+ATH_5Rij z_+q;6$*t)4ahf~YdYm?rYGor=6U#e2bjM~if4#F0nts`h%?7ZT@_VcuB+R@Ji(;z= z5nB3`Bt$9o^g;)s7;I#k<2;d?(VM>J-<~MsS2tHm9ojV?wtBjuQ7T%2UJ6H#SfI zx!{@w9okLznR@>b1-L_JK>l#!Ir#&i;;{1WQABc!cxOWo)bEodO-_xj=-`YI-c&#_ z$S8ELIlK0;Q9FVcPP5E%9TZ{j5VTzKRS=1Z(eX{} zF<$!e(m>(O8pwD{Te^82Yhbx@J)$tPB7Ia;0D2>X$s7rFE2d(CSkuTg!8Q)1MY;Oe z9__r}==9;8{ZH$c8}a^C1>x>c61a*$)zaWq;&F~B3lWi zxMdRWFgX$*to=l;d3})EY+L)2V{ON64G7$At(hcGuwH1%l`6Vu3alZTh6mQiLCyA*QMC3aqW>wdj*zH z#pVYB{V6;(ZCDP74%2Or*H|V=72&uuhWbj{Kco13V|#$%r#$65Qo}|<>&DfbffL7A zDYk#!X{rFOg{(Cek3hCzkh|()MnxF6eYpq#>RRXc zrLb3(nK1Q}ql?M2ejjM51?CQ?-_mkgme>kA@i=*j&Ksq8GCTv}7l(ciibN83{r3@x z4Ogx-z;{h%JI4UDoYNE&I&jP};H6dCEpqL*82@L%`ZHiUwWdTEzT${#k#ILuN0=X@ zHAi746Nl3|i1L=3pO48|rVvUojF4k(*2V2y%IjK0SdVjzJMfjfMzHwGC4*%*87h-I zN&{@OCS=1WPaV;EB0znN50=wpRABf8?+!jjXKy&NnZrWx)QYdP6(-UYbcoG(iBg{K zay@{m2tlq>o!mz!z)-a-jr=UHLqsUE(>l+Ehp0UJ;;i*Q7>fBeTLP{&dMeE!Er$xA zy!c$1)mDjoRe7}UQg?_#$x&9<%emHmWuBpsTLeV)O1?$in^`H5M|W!YR@jmi4c-%q z`OLw6;^yd{aREkP0IkGyhqECoVro|cq7t@9A$^O(dOtb3EBj}{LD*(&8f?rrbv)iprG89tp9uI}?R#ulkX0w1Q5 zlJk_}o{G>XaiUf(l6x~=el5GaSic|zpaR2Jmjv+t_(0x2DQk|3CSfR&V>hfFme%&a z3#~`PnqXD#(p1L0L_wc=GXe>9{MAU&w5Dc(4HT5EzjPP{M&*D85!j%wVO`l?*wogEzH`=Pd8bv^39GY6bm~nPs^+cDL|9+ zf!CEhf?wB`$i^n;#*EHRThSNB@8QYj@|Du@IuiirzW&RrZh!tBZUFu>c=MJ36Q)P@ z_AVFlk}_)&YT%~hCQ2eu63AO_LN91Ie|RbLxK5JIPrGX+^ldgcl`X-<@4X9Qz|@B z$woH^4;>7-P{h2-gA%=&#@FU^u3FHtCBxanJO35CaM1F>FsgY%sOXh@cu*41@lkN% zar>|{oi%>bW^RhWcq`)lO*eOP`^a8?C|>3d)v;}hcWZ$Gx%}wpL-X?sKx;fkdeQ?x zKaCXGj;!e7j_%?SC=@%EfevH&cvJo)5RpZNlwRvN%HFg#_7)9P$1uJ(&N{HXrh0vd zWlPh|Z(AdhFHb*twmP>ysfsbBuC|sgdYmoUx;9qSZ2m#2zgI5RFAm!zkSox9i3`h- zOBSYePzrNZPzwIq!6)q7?E!wT@cNcFTJCpc!bvZW+$FcP3#^6Wc)+W8AM2i|t9$fl z*nf7LVYb_x(~wXu1So&K@t2|$F!AoVsP@-ZtDImyHZiJB z$l0s@`BwS)1Vlnf+8HnHxn6*;;_2X4b$u4nSf~%tnS;)39{^)kfT-o3 z>=ne#M7!Q` z@^JyUk10zIXhgD)@5mq%Z5T;bRVypna8|B`>IC3;?u)HT8Nl5zVG@;0WjWAu+Dk2H z>TIeP##MSzJC(>a$C2$e?2l#WcwAp*5nqn|!}c=g2gGizt^Foq4qy%}hSgxh@SZH!@`E^E^!vz>kU2b$R-U z+~LW%41udbaG>Unug^M;F*ByG(k#Yc`E1i&uI{%Li)C@p2{d)#Q zOkR1hXMbbQ*J#;FJ8zGA`H_tgK;rlo_YD&OxtRbM|Fb_a{TN4l1z~FN8993+*I;UZ z8=M@j0q$d-tJK!?YL z)cd&)R>Z@IzHxF$X`S?5cW9Tg0JC5ltE_F{T_BZ-@E@)H2U8pLxF0)Y zUhjs}dn(@AE0H77IR={`zYh#)weZ?DXKB9*#@nZLKG~@uJ=ZX^3&885ZE$_Yu($RW z#AnnL15fY&?B3D{Js2XpI2H?t50aZBll8dT*Qos>3Ez(U#crS6K;pO5FusOYe>3P)x z4AA*O^@=mNGeHEbc3*h2@lWmHr#o8rrzNAz9HuuF4vCs_m_DqGEr}kA$KleuAl&Ux zDDGC2)caCwXBkc_G6qlXWcJ9<*TD#+TeE*3e`|AJ-CC-{@`QiA3Alf zT(9#U$|D(Se24y;5O5(?GaE}%Vvd5w1^ZB*$t{6c7O-bqF`?u-Y#h zYWnz;fw^_)R*OICE7G;>O|Qc*#FZ=6#F>DlN9&sz@YJAMv@tLEI?XR2_fyT*mbQ^q z;9qQsgH46R0^H9!klWNm$9-wq-`anJtBICE=cR1DU+QAi2YrU)t(xCKo(T^FK5fUG zN}uxPyFZu!2)h?vo}s_ObT;%$(LXvqZPUDnV&u$VqIy6=lTuqOu1v~;^#pFNJZhsy zeP{E)thJeDfPMJ;4?cMrS7`%|bw2?Q=w`Ki0JLe&*d7&%S)Mju?~uIrlVtn${y)M=nIZi7H-T9Eu-CJ zpErDP4Pcy!y*mOEmS$wAD=X)4&*7h`AJ!igY`K+iyf8O9sbNvpy^fCL*w|Z6F2`*z z@%E^8-fJ})Xde4jx@h44>M`(=xEW_W6mrTf0Q*HdNSektmzxhwMjRF(}@nyo(e zY=`9CL5V*=<6C+9=ubvb-E`>qG=?9g37!2O1g*Q!=19gz6lg0ba`Z+^zXEA$RgvQ> zw3RD;(b6e37jryI9)484lIu28@3)3&zfxDq@)jOta%o=@G6F) zhw4H=9V}*W-}u{ZNjp0>xaGsL^BwfCb5{k1G^Z7989E%9H2N80>rW)KncrY}5g?@b z9#+0w3&?POg?1CZ5b8va_(D#w^F)9>dP_VD#N&{HK)KyBbO-;~eke|ib@U5y4uFPyRStwlAf)W-;$BjA?Y z+=k5<)}AVn61;I1USF%kgpuwdbGft!c8Turz2Sn6L)Zm9j{mEhf`SQ)fUHRfA?us`?t|LePUrXiGjm;EuM3Mv-u0a4Jm-Gy=e~V}Dm)ALQV^(r zCqa=*IYm8h} z|LI?g;*_~KO9%qMPb$V5xig9ZidrVMKt@(4PEbmn-*cF>uRiu4F-xm|>ydpe{dNC1 zFaLzwYy80&YAhB#JWmR~TIgmP!Wv)Kz)?@9rEhK+?em9*2|*HI72_tSjfwYpem7f?&bRHCSPOa1?-|*N-|OjnEWt|s+PqeHPf4}#>~~ud zcAF9vK~5kSCj`A=?2tYf$r35b*ZmV&kNjq()>|AH?^wP;0=Bi-n8{9(2AV$>3$uu5 zCX>n)gs^o(`Sy1dFq7$f?3@!)+MaYT|0x?B%U>iGNcmmmSjeU3V#8>l%=2I^!?Av$ z)g9p3;C=i^yOr=Gc(zuk2R>p3JY_#iM0n>K=olsBt)DsT;WqO(PPNsy)l5%V3lOid zZ0bRk#?Zqx$+*@+Vx8)oMK{fKf5tW5g)U{>yq>kCC z6@h;OuNq;cGU--v=!4@y+Y~&@KCboqKuBU+jsz}%L@TUdZF{s93&#?pwR5mbg7+8bs=*eRbRd?ouxrQ}k>ZBJ)w)C1l4lnUF3E++6Spd%p7l72# zEA;mzW5&-!e%9OnIp;lwGIe66IXo*VA%?(Z~3c+jtIa(|s=jr>31RTDjz`;=Er@Ycs(H94aj z(-mFs`%E!FLpRL&y4+sWt^X^O$pMp*GAa^HB}zi-^H9cc(w zK~H^a>{NQRryJ^m)~}_BJ+-1*e1tEsRyzmQMz@V#oKf_+1ILm7NUdBqbGX-}j5W)D zV~EnG>3uG`a}_;xyO+05KVY2iT5npXD6C2msz7EUyz* zE%RL`y!&qT<+Z=%u^1Dfn{2F2?1(uA_O3n`jd|IXuu^gNMjNyRV+e*vSusp z&-aAg562Qt_0J{CuE^FS<_fLr8a*hTfxw&HnAB5T(%ZXe&9m+kNm-RY$7|vN8;l@q^fnGAiH@8UisB>Q?rM$lNGSk^L%ju@WZr;QCPpFS~&A_#;80$TW zQ|!U*-%rP%PH{dEJJ!7r0}g|SM`iiy3TEB;OdC9D;i&7zarB<1H|!t7dDb%?q^G1C zujg{9-dox7iiN)>_e2?`^ufU4|8-NCcb}NT@CMv9!HaqzdTrXOWu6Za2ZT8$QAVE# z*pHjDlJ3}igD)80;t#xt2Am#+IhN8bS2)_S%O6nya{m8)1C)1u!Fm>+s~Y+8sFtRS zeSkiC<2IPS?&_+jI0j3Q#}2;NVLDP#mfQ+xg*bvF!M^rbtw=^YZ-^5G4k^8%*K4NN z6KLrF>kB-E!f;I3{RG;vABZ-T5uz&2pN*pE_<-D&r+iZm{fuy!=}~2!x^1S*pL7jr zY+MOjUQ-jePuf0G>3odPDh@nuLB+L?_J_&+OqhQN;|K|@db3*9777E8P6{wb0?a>R zUyheg&nRqjQ*{h>suCpQ&1%!2}N=^`gbiL}>kIuKc6@j5TiXXe>VppQMh-wM57}_Gpz2 zI^eH7Qu0=9An1&W{ua)~jjv=7pI`#7!I4DX6|pPiaj)!-;!EZ z(Pv&jN#o`!xXj-Obsb6{d&zz6xIx$5%EN?;7k$B3`3dzG`uGR#UdyPTp8gs6m&Y)W z)d^N-w!=u)mIpa%-J06$J=DpkdBw+{lD7UA+=Q#6n>LJ@^tX}5RFF`${f8xoW(S(np6DO!cOY=e-bP3pR|YUHJED=_JPFE z%rK$-zQ(jjqW`hjLC^WpeLOMT_|SdAGw(~1lpKdzBdQBmB!8>0WCu7&6H=F=X@;@l=_m6Qt!{ryJ$ZkoT9WC@<_jx|U z`ozZ2E;C$xX+428N@?DvG5_NdLL6F9cJTN1rP(bbyy!bBFCSJ;&H=jVJDCNqT0$9{ z;A8(mTS7W1nehq+43UChK6m*h6#k;3+$RPVbzP4I)bw+7bOjwOtWjeCO+?B3nw(Q+sjvXd#@4Hmt2fz$0=iC5+PE5B(`>vMK3Cnf>(-L!Eec9 z8+!^haBQvx(82E`PKN089Ngg7=L;KP&D%;gCZ{&I^@4*+Ob&OTrPT3sOKDWWHq+DG zGWQNbE~C|#yaNZZ7EVEOaw=EHl2qSwgMTq)8K0?BMm^~gb$&_DPjsI_*%VHiG&(h- z(_AX=u9Um5bx|7Q=|Sh

rFVn6bg4u{IQ(xV}22yb~ieg=tXb6z7sooB@^#T%a5M&pOEA9ip}Ljwe()SqVYHVi!v4*1L}Do-r6AI4(uSGSgC;&| z0R38bO^H$uS*<{L5v`m7j}sxM|0CP^zbWj&Jmtu3gpk-BVWCeojPrblYrkJDcg&z3 zw2PQ*fLJ8P)F$19Fp#pOrIxA@|1Xk5v?+etBcEIP>y4wmhJ}E!pf28_qjlxuLMB~? z8!k?D_+KChdUnX@$pOL#N`+yDqI2QXwm-D+Y1^L~hx#UczkggH^&7|9r+jS%GEKUZ z)P6(bBp&{jhaj1zse7ifWqWKW3EOWzt(=s9KT+i&uk}f~tdv)i`06N^gl2l6-YPmt z;0eoFiS1BN2D$-b!+Pp7`@XGLXq92Kjd=&PNXPF23(QY(<_alu_VM1{TrROCgL;kj zioru2AeJEZUtoeG7CI&rTh|EVIQN%~G;`zq%pEopQ`f#-v0=TE}B;NvH@B{zGmayJp;yMfSXi+6NL<@93h0E>Aq-$|u@EN_h zmQd0L=J5=BxC3k2^YbIZm=4N@hRr3oYE9o&N^18W1RnD#TYYxTRG370B$ek2>y>0; znoKI{DUaS21L&aF;|>A_UG1<(%1sN9IzdL-6Uf|(LkD%C7G!r;X5T**X1TUF!zR3! zCA&#zRDJMuj+Quy+b$l_j>a#jlei(SyY2{amG=-e zrV4?nV_Y>w5Q5c6LQNKkT9NPxj5#emzQoeDlZY&o*pqH7=v5N4J z=GFoYA#Rn@_C@1-=jPuZD44r`uw9qMH!kJ4aONy((WAc?9Bn5SM~@P9m+Y~W2g84p zFbwFXNRLTDq-Ou2RGFLI-do>_PLP&!OGcQ^8!w585iIxZg5=XOs*O*KU-> z5<2_O25>tr&@LO@*So%*OHcjS-S5z6ZfS}Cc+u@zUO*U~F~xn-(#&c==E1<32I_m= zudj$*y-9$U&^Xc6)oU&YVw`-Z^@Wz%t~lE(L_^R?@{>H@wp2%;(>`2*@`wKOl!hTs z8dbL|M0aBF<&w5)t@nt2vw~VcJdhrtJ+qQ-q{wUpI^^!KQ~Adas!giO$%K&Xtj?B%cSB83cM}bWr0Rp4kwgG03h0H*} z5WsRJc{^Rrr})VFvF^I6jG@^(0P~ zr<#yxB+Z?@Xd0gRvQLRScwlr15z9&619=@FV$^mopEn$&y>~Z4W}qAr9H^WmRUk~S zccMVljo%Gc!&)3+j(6ftZr3`3LS;tSKp}17SdRzRH8doknWKXsNZxJ>FFrn|H*84L z_n=^-vO%ZiEZ|7K+vZH^AR)>X&dFadahv!|P>@*GG)1o3xO0cCCjzT#eBk4;#rurd zN761UJSNTpA07r?q4of(KWO16*tX7}|DpGrIVTTaitSwQr#f+G$-*WPU-!H;iKMQy z3unZ5mu5Qf@8f*v{uuXF?z?)sXVG-&ixVcM#cd9qgmyK5L2pAZExc%2{C;uktF^Lv zfnvA{sq7f<7ls0BNXeDbxt(5fSU#zf=*D;5IfqZP+}tVb!|u?LW4*bQLXFbb`mmNs zP92Ea{?&g{Z?9aVChgIr;505!f0S!U18!%)p4W7W9sv)$?*Ae`_W?Md&3id_D zSI4&Zn$HCa#2Y5_3tQ(9I$SwGy7A6_B(^~SiJQ{6mK3pHFhl4=liYK)?Rd@Pz#Ibr zX?Ry(-sE@?AzJ%F>$M}xJw12%q%P_WN}q{hJ|Py-Zyg!!Ir!`ASRwt#1C3vM$m%SH zI4s5T(T}z&OyK@U{juNj92wGCk4w-qB_8 z@n=F}wx`&l?u9XY}A3FQUOw|d>m1n_f)`1-!2fiGlx9#7lK1#p?^ zgco9s$27`eTCm_AM_B_=v;xh^h3kvA%Fmvy!u5aH(~|*=_AURFvan@2o_L^TIQO=W zTSCG`Vfp&?h+8`A&dv>C*CUk2blyHN_9AmVqu79-Mb#QYe);xk1Kytzt^&=?n~wRp z6ajH!tz?8rt>2rRS0p7ncKjGeh%KeR=g`}ry>;?@RFI~wt_?T(#8B9I=x2pC+-Wz& z)572`W{V2ze_e6#F=CwmMF9sbH?{W&%*BF#WK~mdP-|I*VoX=*>mK&MV5x+gZOQKjtp@(Lqq55yNl0F1_SRIw{9LHzes&K+>fF za7wOU-vmhyF4Gaw&b@~eK5onA&AxtqbW`$(Da${I44raO@gPPlXxJpXvxy|P?rcJB zsfBQnWX_`MrlzUel+eh!9WK0$O1us`T)q=KY#Vf%B3vDv2q}PrDtTStVUzRl70dwe zn*7Z`@I`EVe3TOj16)$+5vTCFay7=4dP# znhiNZEVoqcPLN(SMAc;~hq=jNu+o_#C~I}020I(6@L`JRyDg3RFaT8>qcl7Dd@bZ^ zT6it5_`0)8s&Uf6Lhk$fMP*?F#7Dx>X8nok~ zF@|F91=Mr+jUuV#s5GH!UTsoyfT$S}zTRmTJI#=PT23$7zv|%`02eoCQ3ow5hn^B_+uv@4O4S;X&Vw3b#%3=a4SG~9`W>0-yPF39 zhlFa)2eoGMN+H3)H=zO*PS1*hb)aotW;GU>+vH)Bfl(e1idG`L7$;=0-of+WP9BSo zYYZEu0~;$_`+^9osa+uVFoOYd9T^7)e$I}y^&}s$|CklpvrztEp}cv9yx9}GuIait z9K#$aRB?ZzZ??eLQ~E|LuMZ-RVIie~B(=q(Wys47d-y85StJk$%4RpjX@t18WzyQ( zs5n0zT<&wRF7uq8TAioVxJ+uq_r_9-p*`VZZ?RS`*YbK>qkGA%Qsgn-6pQ|(!zQt+ z`cEhq2sO$6{a;7M?~61)fMO5Dw_V^@UQ?J;74t>*!6)s!rm~MxwLqaRMT5#(qYQhq z%}yi%HF;QXF&1WGWO3}+|EBWw-h6#5*A$zRhvRG9u%Dw006|Y`aUJ9?2+q~-%zT}_ZfIB|E3C0%3f~Uy*_o8E{^LNxxVKE9I=qz8 z@l~}+RUV-aU&Y2=vSpN=Tqk)jElM$q3__%y+XGG8OUX#U{^Me8v|y%=jM&nge6`}%MEul6vnn+&j^m|Z4fhcViycC z%1q{wR`0Kk*|tr08eP25ol^9<^K|aYgMI=spo)8ox`4B^;Bw^;$$N)Z4%dLlo42*7 z(O<6myDzBIC~S24um(2k<62ll^}>oDg2m3QZjbHb7JlaHHu3!N-nKF8&76xa&j^# zBeeoDn(l5MT4G$Tn5X+Wy7c4p2+Q+|a?`6^);$h^e~bQ8YWX*Ju8!2b1=%z*{Os6( z$awv4^7_%oF+wx2MROr94>i^Px3pwVpjG_2E+a{WzC^TANIc@t2MNyOgthjoz_pfK zotfWo4pV~+;fTarX(WiR@l`5A+U7`%f0wwIkYR<{%M*6xQ=%@!NjAnk+X@)Bh;81@ z2B2L`)`=DpW^uxz+&fnp?^Jh_?Q`VTgKr+B{7gh0ZIK>Apbr4v9$voH1+*J=CmHZO zU`zb79}@mrC!Qb&QCa?i4yf*t!FlPAm)kNwtZk0i@&ij{eF@?kF1{P7=iKVrxO;mb z4byJzlD4}XJa}+vcFmQvfCSO?%+O$oDnCEJP~&hoHs&F-8O5GGs!V9QA6LByT-g&R zPL!3E&0T+87x?#_rR^$-0vDEWvsEz*^aD)in)W8Q7dneYi85(pR1$}?kn?urd<;v_Qr9l zXM4lXuX4QVf}E-Ce^k~#0~toc(ik!0&R`ABL5YI4H>gmsi!&gznxQyngal*# zzL7(8`+!=Ct=Ciyj_<^Y85mi#`s ziR%wm%w6lafz>@PIJn+mNnskDejf|SFBYG zn3c}km^wivmBnvcb5NwH7oikr!4@`_0*d8)&=G;ts?Fum-6x_=JD+pW*p!t0Ji=_; zijw#$$mK#oaNAuaNn@(~;zI04H=$2lW1pH8VHiT`ZfA+AP;J@n%LfbXJfskF>+d#+ z6#9<>?A=&U_m!0yQc`%jJN%3z8WWTWevEC;)!emQLr|O&Eap(PNMcNoOcgSi?LJr# z6i!6`RLER#c68p3gnhbnd2qhM8G!t;ZSz1y;J|8*u}C_De(%;8ANuQ~!-i6vPaF4H ze?$ad4o+*(`nio+hG#|AuqG_+D_rso}JftdcDeV13`&)0A4OfJ~d4$^EQ7))(-o5 zE=vT2%t6WIUB$ii8tM}))F-gAZIN5jx3DyN59*l?rL#FOx@(4f^;ggLnt}k%-{a}M zsKlWro`Fkl`uJ7-`=Mw2Tc*Vm?I`4NEhOVNxx@r&B%kxAEZe757RwvX} z`G6Gf*1ed|mr9MT$TT7-h!B2)bUmCWm^u5xKp6J9Jll0`lIi3^TXv1uZjne&4L8d% zoa3mZLfY1b^`A||Bn||G?6CDp`$_L*ivb)3J4o(#vl5Ve7Qv~lSL-! zl5NX)y;vvugM`DYCFX2JVt-z3nu`K?eC&G``m-FF4TWhj%J-BRYKA_ts`{i-laRM= z``wF)qgNE4HyqShb4oY*qIBaJWhR#|Cct9dk-2L&X`zB(Ie{s}aUfTElW%yrWXRA) z78XkpGd#k4hGT!Vv6W+Q3`*=?vxi)aqQ@lC7DbppDl<|?D>t*G&WGVFsr5#RYd){! zCnj^(z)QNL;01!t>~AVCiN1_%a*6IeynJwY03px4f7d0t{XMbk)=0s8S`Uo<*CKt;iVdNjE4><-+yQEmMy~T*!V>_YIuV|B1xrI|I>09 zwkBe9(4j!f!{V5r+t zZqslHg9JPPjm46IQ~VKiL$CY$4v8qzhBbca-#4Z=ZuJ_LIbCJ`EK7LN$9^+Fc#FKG zl3U4~Yq87vL$_^=HOLue)zRGnYC#~m&S>Wx@!f~E2qYyXyVkd#K&Gwg)ly9;FQv;b zFZ3Nye`BLPO7{A1JSYgMrt(&s7VC(vJ@`&X| zygZO4bgPc4jmR`e6y=(L+^*eP*jmw|R0+!?kJ&zz&No4)VGXjkQVtSLIfC%OzdhW+ zRG&gkN6ySfgGi5}GUhuq1x*N;AJtr;lF!`9k_4M3v#I#Vt3NDV8G3N4%%1GOLv?bY z2J?61XE`ns$OkbbRPzYQ|Hj<)(VeH#3p5ZdnN#ZHyebXpPz$&%NN~<$m`>Z<-frX= zzDlm?Oh$Wx=mFm4d8)VFx{TL!ksZC`K0fxs9FOdpE?^Q;%TM9gi#+4Iup!l2PH+={ zdpUzC5Jk-*E0_bTvKU&`Y^y`teon(+r8ovCLFGg}^CS{JALKS#zyyab8w{z~hnBV= z9Zr@zZH3)&*!c4o#O$q9cf%@R9>?;N6!6xJvH8bB3X4~Wtk@r?^~y}4azn84j(;p; zlo;Fio=Mk`%k$JC%GQ-s9=YRWNi&GI9uWywWdcDdC$wh+S5H$3o6nkaO^Jd2jZAb; zjiVESsN@}{KsJXgEo7i`JMV2O)O^!bph+nKhGN7}Ky1Ak$24)&@y(aTC}lQm@0+e$ z8faX?wPDFhMCs|9u4vZKpx1XR zT9JcMN7siW52Aw3n(2*`kf=Q=r8v`)Sx>%4Q=C=$y#A$TQ9g7gUl{If4u3Z1uf37q U1P>pA|Nipk;x}?%Te@c;k- delta 136671 zcmb5Wd0bOh`ajMRL_tiIB?v;Q)>3OVcC3PB$#gm`W38sGA4{u{xKyd41Vm-Yaw$T02j;n7n@9U7tW0;(!;SU^QWP#O$?g83_+sVo zFMqO#@8kEhu8m80_6KK;tC8f3c8Pj`$NkN3CbnDItJ7Q`d6tR7XwT2^h)Xc>lELgv z9{#|3f&Qx7?JZ!z5A?-BTlm)VQo}h38BOZaIbF-Io6d%Hnol!L(}4c|6n~G3sCCBA zKvOSmA<%8|2=c5eMjx&;7Jz#Z0pU~9u{|0KVv%BidC4`@%_SS0UgXR23w89;dzOpt z6ghQ`^3h=DJtlq^d^76t3Q+8t6yWLtW-GmenViDv!bY(r9oc>Db>|7b&5#6w3m6uZ3y81bUu5sQ2Fo8`ezm z2di8CvfKu*fY}MteL+{NU(yQ$q4=lW{=Cs!^06ZEaAkPbnYw|ajXT`=);rRvohgG; z7q4!~>*4w#w5YM>$bCv@HoaSn8e)-g6<;3^Z!Ry29y?F9)hFDAsb8%fpROHWjp>)L z-K(9OL*1k7we(3RMocZ5YTt||y46Kv@kET_;R%AV{rqxQ>lf)+MY$P8>Goy`{&Dxk z(!}sV*u;<|Ib34k z+2#EBz zZs2A6Q3a_A&&rDvp9IJQ39e^5>!rBOA*@*+FX*~0v0uivFT{vbJT2I_dTK!4;<^A< zQ=0uc-#%0nJ)skDzqR_D2*!EWeR zpf;cO<%usn17+v)y77V?5G`T3Z@Ah;NwIYXVIS38ud^EeO0(Ha#$G zu3{)o+>`r)m`o?^zA=WR`qWB?1|FY=Tv|uJHYo-7DN+{i%bUJBXgc?W$(Neel6C*+ zotOdSKS9rYe@0$Z4%4+9WPj-i)>l~yy(Rd3%+SMhtmcu&*#?7jysaooZw?n55*F}U$pZcN1_9X zgq>Ar)oAe-dB!Ftxk#&jyXIc)@P4*o3?0m86CtVrlf-;164gc`J&#jNwM?6N;>c-Q zgPkL|a|*MZLTm6);*0#|Q(dRdPwIrtimKVPx!#zzyBtWGX#sOGP6ELLp$cgTC&v%w zMe>bisjRAsti#9!Qr#WaheH)iPKLM|5X=~kBpMh^Oz5KVd|0tj?Z}=3y&vN|4KrZB1M4r{d#pnx*kK~<= zjTt_1h+!7@BqGefhAGxUK54^jhf(Wkt>bu8)2%b1j^_(o(h-LO*E5}6bcB?~BXvVL zG0wL&O2zBlxn#H2yeMR1_#FBtVA?!pfe($eRjy+2O@Id@)UDc3jP^6}T1+{)PEfb z!Fu0H(Tr*?_pMKe+XpURqxsEOH<&9*tBO`LbDvY(HeU)&G!~M{M|Y&PBFq(0?CTZ7 z$gCAvXOvF3LeKXP4B-){qPJd;EI;B)|C(B3(08cy2Fanm`At}b z0hV-c-!&_YD4sZl$69|;IhTB~eU~iM##>N&xUa_jlk2Io;N{!vQ@gR*)HhG!G8sUv zM&Qw5KOY3Zxn$2P%c{#wkWM0wi^l-jU!u}&28~O}EY#eH7(V1%FEsYLwyu4i?a}FeVc=n58d9$HVxh&zV(RALjzVR8I{;$VmK=RHTTkuDfl@ zx{ZtV4AgW=HMDzc-+^_D=yH28Mrx`gcTfe3=q;1CM4oEi;ardRvcw~ivX-H{^-p`d z{Xf^<)K+ps@j&IZdiPl&CF@>fJxE9|zz2BNGv16vdhOobSGS*ZMp8e;zWBSxy@xLT z$;3AdN`q#=aCCiL$n|AdIT_7{zd3NS}A-*z%d z8o8(U!8D5leDmS-0PyuDn)eiWQ)G3sFVpfBc;$01W*+(h!&L`T|2`!Uup0b=pBFp( zlJS!g>zFAkN@TZIp^E(92H3Trhnx|ZCrR7p)~N+G^2s59v(uB|N`hC1=xkrP)_JQ+ z`?_+EX$%`Mh1$MfpABjsPxd=8*MkP$|JgOb-z{6~Xy#QrE~X{KVMGE~`%P};0JvB5 zTmTqd`X$ljg9xA9>OlANLPhA5+xC- zT_CiH9=Jdkju_V?&IWeXM?1(djCg2LvPVlW`x#^~QErC$)8$;zwK7ph?(uQpdfSij zqLj3U6V_a0FGAi>scf;)!~PYcHx5*x#z?m9Q4&+wdvg!$C+VfJ2DYH!R%DeK({6{sL7te@PHE{Y6v{9p}z?> z?(%#I>|5&=IK!noTx{Yb8VMHZoFZ{-!_06YoWcMy6)g}**7(l^my*5b)7E)|t~}-e zcv6^0AlSLz<2nDsGinZ`2_)n9c#bf{YLQxBX4T{1RSi85EWG14nMRFaFs`7#0N($e z9_Xe}Oq?4KUwz5qju{){VQkbDb21GfWihx0T+W>|2h4uOEvKyLEZyC8s{+v{BFM54 zqz}&UC2U)Mp{{&AyXTDDelQoAq)S50(L9}pc5>$)6Zgqk_zI73@)Tyf1DzgH2> zaa@qthk3*RKXUKrT|O~L7q;cd?)plsMV_8jn0Y6Yv^J3U!1Hf;%>)NA+H(Q(|Lw+D z)M;8F8Gjuygt0AOO08Sr+j^y8a$rc*UrRz#a1*_1h#{6LQ=O-&P{Sws z^AtbVeIO*jFVM~41aHJm4GPH67c#B;6a!b7wr^Njch(TY57(0fm>%x$H~GmF#ydc= zhnEOUzdbp?)ehd+Ne`ekAdi*c4H-9;H_dhBcO=m9Jgdu#AS?I5G4zyHRS!C z+FcW%#2v(rfDOw70)k<152*JE7Dr6{8+?x)v?@b8+T9bExn<0uq zAffIu%>$qv@(OT^Dmr?0HqD|EoCX^Yc+3ergiICQZxD|4)EXAZiOr$rFY*hWXFDpu z1`pc8X~Oyvi;KkYu@=9=A|HcG%L9VI>B(N9ZW*h=?6b5WR}0{6rw78>|NJB`2C_hI z*lg3Lz#w$d&U~Bpn}rMK?4m+b_Ti>m>*ZrfVrP-O0Y<`hLmV=cYq1=ul*?g&Hmv3K zof8|C#OOTk@J6bK2|S*CAk_AQRQ~~LOG3;uSf)#1Z2hwC2Sa_BaSVO#G!wp;P8go+ z!$ebBSa>J1Flx^Z@ZRmo{*wz8i5-!_@z+6$-OYcsLS2eEud&N)rzQ5!))eL9{kg;- zLu^jRM>)>xV@&65R-3BbTAphirc#iIJ@z(>Sk1bAK|}!2V^eqmaU3qsQpX*p>xtN6 z@G5_jU*gb`hKe0Y0(a|YEXU7r;%mVAkZ--s$3K^Rt8n~jU&EITHlA6lR045Dtb91B z`T?JKB$3@*89lm!Q||M}>)5H70J?8a_5(-zX+c{o9gkElF?bqA9#)O7726w-5o3(8 z12M#kOIM9~%SY=}WOR&$S{No4A-EV-jIN0p$l;l{VA<+%J(HBN99Q_dRHkK^lXYJr z8i*s_z*s7KNjO1h5jZj=_kip5=K^2&<*e>F@j&E0j{U4MI;s_@vH zUTlRcha{3V<$0|+Sz^mUtSx-o2`2GXV$?M2F^;VVh}y%gl~Tvo;IyxQfGbWx)gYRq z|Mm!AD!oI3Fr5!(S&5E!kv&W?lBgcfD;!rd?WcK`2~g|9)B9t`o?v_8Fi8E;Cjh)2 zMSE{q8Z|+trWhW)`rWEAO;vLOgd)CSW&42eWUNbi*BDtCg-W-&#WBOL((Mq}*QICXbJoL5{)8E5&$am%a*v!nb%-4uObdZwH2^Onv%p;l|Ib-TvGKc8>? zi=*iN{))Mwncfq(&n3T*4vG(Cp!o0}#ld!B6gz-mygU47)!`VX(nl+}_h{(`MB4w$wJg@r*x^4RpvKO7Po# z@_wV-Gh_4+dweZ-Y#!hY(HL&!Sl;tL`2Dq0dz?2mFMElyz~%h5-sLhwv5b~7_^ofv zYpc>#V$3JJFlLWEP`68J{Rn3K+A8An7C4t`8s(j5#OiRu4e(Zbh0RXOx_gLC%h0`< z?DB9#|A&TbvBNanKfv3~h042KL!Dm-13bY0B_uaaIKXh{8n%Q^=@fTF*ErAywHszT zC7J5H#dCUr=-%n924hBB9XBXq&v1QC)F-lv%&GrsTDC69(rJ9HyN^vQt-yHBThf&F zxuN=9om!`@YS4K2)~0;Va&=*mE0feqZ^LKG5)b&Ox@DQ-Q2iIc9j@KmY8nvdx};qw zYCXiO__IS-|LzXegGut1!NJRzvq_7oVp=Vw%FI*gRD#EN+K!!N(S^@OsQ#hf&XC%G z;3c6O5)+NvII^@^MHh?HJH^bD;RlzCVg`}Y0j+Z-KemI30T?@+R%$PNFo zFLS)~NaH*6qYkx$%Nd^jfR`}c%a2;KjmLRTcM3l1w(uP9ck)m4dj@!BtX>v3UOEk2 z%J2;E_>N7sG=Mi^=)UgH7dC){k5_OD};DtyKE`TgI(&7&0mA--%>~Pen_*F#gVvAT zky+y5QX{=TnK8#~p2pU!QQ;4UPEoUj+^59{_(Y||YLGfU4gGH9Wja_CJ}uZ|g}S!Z zaDtfRKUJAA23#vI?m|mSe8BVoU%$Bjd5yxBQ|X=Qz5UH4oGR}K@upyFkHr4(ba6h% zHY_F1pm+x+esG36q$LSUww$MnvWsiCoZB6hUj}Mscm#ytI7Wv4Z1L7u=1UB9Jlk>V zJ=kL4@{2a&0G;8%@YEOVNc$LLfyJFu0zD8yjZOuZPx<<~-!!%X&blc9OJB=h$Q`++ z8nTGB4T+_<7NCap$$UxYqt{)9E#Y|6rpvM_ffggi_)_J{Cp?lpd=9|Q`Td`}tt<yf#CfCPhXFTb3ve=$6SEwCVM?sj?1;S zBRngiCCG2^9z2nV_RpPpB!zz z6}pQUJtwh#gVDr8YC^Xr#yp~}?i*c+cFs*&D8ld?3a6?_II6@l8``O$`*59I-Y1qC z?JQ(>x&3S|UdgwA%Or;+)}2HNSHG4!3Tc$LB*p~Pz7lbkV7fe*gBbT9Tr>Rs98VX` zcC0}ihu99!c=MN1!=@UFouJ4bD!I_Zuy*wmsk4_UQkOaJK73d|QcWyy!SFG*r%+)L)>{xVF_uPVfo}w~ zfWXK(8KF|07vG+&HGhnd7L;sZ<4fV&xb!wHU|KBAGUD*i!Bw)fxOFx_tLQUb^RG5)kLZ{wPz3+HqN_K!WQ!TSYX{@}e{`sBQy@6!Ag zePh_r9>h{c7zA=$tuo@OuNr~Q-)q67IMHFyD+WKm?H@v`&<`#F_pZV-e?H|#bAwBt ztBDp80EsMfZCTXg%DTFNM%j(c+2L8Gablp;dHMNb>vsJ@`A&!mINu2LwXO^#PTa~s z9nGZ@+imPGhg;qZ-P`9WeB7}kd0`>s<=DnNbW2cCPSj{U-THHxtqRTj3y|Gdz&6X+ z-3!I$FvP+l`csc)UtI9lvF#-X7~k!^_V9*#H6AHb<%J?03i7TN=BI>asj|@dZ>d$M z6w5#rd@yXIFKWzV+vlxM;3dVaT*x==m6~ogu=|R{qh;a&2JzS)yc)StBvbDX-Gzf% zGmSB|&i%o~hwI9JJoeb30lD-27;ka1ZY)ueZ>k2jaVm@ua;-m~n)Op%GNkfF`6xaT zri914e0MD4P+4YEWHPG#?-!4*Gg@;{(XfQLhe;|1Z!*NUa!^R~_3u=atKn(k`zUTA zNBEPnYj?|;LhDWTfbGJy;%j}&O}JYIxaUs`3CimAC6B4~W%Axl=wcjR%?ymEpI}Y%ygK?tPvL5loual`?!&TOwK^vXvr#r(2ehuw&Gf!_?clS(o!T`y5Ih$<SCxP{{ zl{plpCI(orN5~xRYwBiAXr#P#&vDO)*Vi4c+dXOxV6{c827BqNCCi)LXMyzt^dQik zP4kR`gk<6CqOTB1YQdth(1Mt>0z~%gqk5y@qukO=MOsk9(0xrU1Q40o&wgZV2ODp| zU~E%_0beI=;p_vITGgSj)ye4z1LB;V;*HS-5fyd#Gm4A+5QndY_&#LARY`8tBo;z9f+EP;<^o)V|&6Xu!z-C=LcFSY3v|G z^{M5%-yV{;6!Cj`{8>3GfhJO9f3YxUY~x4GTZ5yDQfDnnsML-RB=r z%%bq>FWMo%ByJuIa^PZxnWos5mL{)Qu6A7(uFlU-D{KMpz2Q0&Ie-+m|5!En$TzA+ z_-a0DYZT1yl-%^A>Z=vYvCabHoQdCZo0@Ecg9VHqMux8`PxUX~ncN&6uC8{OUP(RU zzbe-fb9W~o_VHED{3riLv5#&o^?}Va6>+eeX~UHSd}>zk^q`fM7uoQ^!gl(=5NNmj zEqf=0vG0QoyQeZdH~!s)Wob(Xmq@>vV05F~Y%sRcpPQF0Kl3tqL1n!b^VxsqYSbm@ z21Blh{;cCM4I2hbKbSY>q4VpnyJO&5^#Fhn`;# z|2|pte+Bwv$obTDp(QpcTnY)*bTX?YVqxyX>d6z|KI5+ELU{w}o1k8wF|Xk6yZ$rt z7-=C0QX$2^WM+1Rt%2$#Xkga4|w?k%`kl-qOmOH5p{^UflSFLFHj_E?S=gDEWY(iiId6|#w@Mt zxTEu!<{^ngUOb??&2*R`YU7m*+~OKGN{9-rAmh@khnumuZh^dy0qJxiLl$%q)!#kW zwV!1h&b8KIjt+@q2#Zc@I#?8AJ7TLwaxJ3LaB*o|kC=_v&Y-3=HeN*$rw_ugS0$E- zT)v)fez}HE3`@wHxkUW|qoAWBSfbme)qfG&Wr)V~-l!=FS@vVYg{2yck!^Ia4LJJx zs+|xA<*|)2rr}cXk!f*%(uL`@?!w+!QJ2WVjo7f-jE3!Nrx0;G;o9A||t zQXAW=lw~tQ`sagU)M-w$uYQ5#hz1+3FPYioPzQ}xg(jqcXT{Q{8%aLUnyUvGqTAhwqY(W zVpUyp^92sk&$J&xt*w~7gc@EXsNP>w0^&TwZxN8Gyj6~5f|DwF8J zbQF7n+VU}kJd9bxr|a|BwzU-7Yg~nmmqEaa+1H~c_t;oL;{ZW924ebVk}12dmc?rj zohQ;%TYHY;9t+NIOjJJzLkx6C|Kj!3jS7~h8P`bcN~5heTGf|^Sr21OYlXz|xx{%} z8ua-1hsFyk1jLNz0VaP#Jzr@=CDHekNub`U_` zHWTO$dd;6)+O!2B!g5J4`%5n#C~2lMCZ(WNTBy^e9{2Ne&x(!#scZZhevp{a6d}E3 z9Q?m>$=eKm28V=;~CRXO9N|6gS03Kt6KP|EP7~)0tU-qYRu>J zoiNug;E>nDqI+h-!0L`z1&Hx5&)CO7hEJ76_Z6-L(~!Y1M4f|bF zmvdb>-~NcHcz2P5Qp|bw3id~#B^*hNcw0J|FE=+VF%EHLMopvw@8Yqyq$Q>HI8{oq zjh;BDbq?~xeM+ZQmd<-zX-C2l+gXM6ET8yqE&R2Cu0;3K24-YCG=h4H%Dc8#kx|bU zJ}Q#w3E}{TcQNtL`PQGk8Jb1sRC_xhlhen8G>Id>D8?k!R;VBD-`~}~W4{A$);fO* z7xy8todRu1LbxLzwKXZMUxf=EwGehlt&3$bZiVKnsNAAToLV>hyGt0=TH){-(q1S? zj*e&(!H>hi@}4(Y@#R&=vO0F=l2Em2Dq`b&t=w?|v81C_6`4@E5uoNIcEl1yoi6SV zM)h+wGQ{%mVm{u4IR_Jk_4y?q=D?}Oes$`CZaBdfXsfi>4<8PBiouyV-9L~A&d$z}d2nJ*Mfom9{#z`4p9O+XvTQlx1v`jttKY-DAu_Mk8fp zPPM72EWQyJLk;A$vwW+WgV_Hqb?TI&{c+u{F}ga{AhncYLtU5-4zjvBf5nhHdvs@v zZ3*T$rNVt!1z2QMJbqt+pKb~lI>JN`8NwP*0kD8Rc$& zcwb0eU8|OO$SXN9BDL4&;x{>n!h&~~-5n3E)-OnS6m2bKXLdqi1aZW1vhZ;6yl45@ zlchIw!>o?O;XLCQMh-Cz?^9Zf{#^+hS#iHEG}Tyys2sBU#d7Or-sowtDD)p$ZF7@} zafJYl%W7pHqlb{_V-CENgNN$6*v@vgIgKamG8JV^09~7kX)B1!7+^HsEwzjp3RI7q zxB~*DKMgWDyjPYeRAmldwmrWlT-*>wc5}o8BpDjZ9*Rdjkr3+IUES^ z8jJJj7@hc{48N+#L;-TE0mg62rh>2%qP`x7xt4QCVi8Nne_#=948co^p%RR^h8P&= z=rx{pU|plcuE&BJ_VzU?g$@g1&k;U|gg7dyh0&}{ZGUZ5xJuYmhLAgpQ{(2uqj%J>#a4cmdVE5#4eNnIlP2uYG1YoTJrCyxE>-klTn zqXC}&)tsD0%Br-IL4P57bb7d`UX9c&kPRPV58evBk(Sk1=G18&@(!-nq}n`7i4r52 z!=0_GxK71$drQn%1GIQyR-NvCZS7m#B9+=3vU)jjna9g|#Z>%Ga=>U^1~DxnF>jZe z_wM~H(^aJw$#rT(4EgOBpPjbu9qhA$&(V>x(pp_k96wzf19>UMEI%Z5{=m|&WRp2s!!pVBbr&mM*$D-WGs!mS zs>pk)j<|fi3{ZmOqzL$;e?Gsrqr_4G(LO{tG}Z7<-l4LAmKY-ViOhnuKoaguc7xpd zW_AZ3`l_C39fheQT{V;_q8PfqUb`ITpwMM7rMk649>8y;D33Ju=Fslxxzz_8(Y@c4 zx%@_E`Kk!>ss3LL*z)ZoeP0J^D@G8ibuLoN=hCN+lV>o+y?St@`YwyS!IY15h$~?? zJJPed_|6}gIAoO%VYVjpU#zWs-HTFZq1LjMqO5I^sEvUd^O0A1cU9f1xF;P65$P8m zQmSV6Wft)>^rR_pm0>5>w;UqFnoFUXs}a6!nRH5g+Srs0ALT-#;GKh>?D4E_lj^a* zn9?|PDIdQB4RkBI-_Ml~8DG`jz-Y zDQOES!z^a#Z$O>ii1i}hF?7A+$7}t_6^iq+n|QXCbWsPV%*UlV9xNEf1;f}7kvGk2Xji6 zA!7Ak*&|Q{Cw6-Ufad2sd?rP~FUom<`M#Gw!YOg3?x&-imTJUM-n#2wEIaBnhB?iA z=PgfBTZh~{f_6gx1v3WUmM*{B$hJQi+WZ^0C*@m?u2G8y%Xp8XGj7FYUXBwqfe8f~ zu~rpvD^qmSwDw7qp@o5%EfT9WQP=`W;3}CizZ$8llGjp#^(_gGhs6*xCwz&!q`JUG zRfCmziVS;KaqD7dw#ntsI3)q685S7X2BHA;~B1W|coAT40m)b7J zAx)syRRj5WQ+Od|3-aLF*7ABO#hNu1THRY*-Bv6cTuI(xIqy-3xO5&64KajT2vg&P z#~FfaO5qUCc7ScqK?U2d)3Tw!o0&brj}SqLLUU_>U)Xi=xF<3eC)VdWq_ap_&AVkKqNVNp-Q)kn|UoL8L5}?b#F_5`W-ovwtbB|*S>|h$8su>Nzys)kXR-k zQ^<(owz(SrQ1@dqC^HpahglX-ehrqzE7$d%DH=-_U*~llvm~%BeKF2riTOb!RHjB( z#yl|RAl(42e>ifJgFoiKlXV$n{c9}OS;KPtz`|=`7@oFBa2tqU(Cx&=TS#3Q2inkx zlc=?{0lf5Q_bP0OL)z(LMH%T-kmFj&j2QQD&#&^y7y_aP5R-|V>?ogzh=|@R%a(S- zWc+=I;LOn2iM-a`-Tj4Hy-+o{bO!>#R%<%s+Yv0C=!MJ%mAtyi$MVI{FlOEc7eKZV zPBiO`fg;3NhCFtNZQD3<;{aEG`LFX2sK=pMYzj8MifKz@TYQdk9oMjdc|60leSF9D zToS^1TL^ zM32o+cLSks`!hW>-@tGM^m;Go_Je{B*!LG`$;c1)@XyO`rn!qS{c-HM#U4MNySp_S zZ0w;kfkx!-39fWQdi>Q0kLMBfc(T^?BG0mxZC}VEeUAnNm!7F>ZInCDh#lc%??lR$ zo`7G<&1}dEOOF}aEZ6+@JGS){+H<8$pjN^`M|M!l8-q3KS|f~cf1zn>G%NdT`;ThZ z7=4RsOeSqQNuwu9K^u05u@n8A<=Y?I2Jv1k5I2IikLH>4s)8@TUT+CxTJr@az(nb6E1Y}xHNXaQH4k3rzA+f|EbWE2O zr5`KYtIZ>_PP#}d?KFQS5L+F{mdpPV{S+(5N6>o>HN9G z@zAtUtAKKC;T-ZNze8iUQ|K(JX#f60RJO@@U)2{KqduP>YP!sHByckC@F=242eZU& z=N=$RQCGS|5l%(WJhlFj6ko(1e^Y``n7D^Y{QK4>-^OFio6(W^99v^zR3B3g)tZuHcIfiaOn>YCj_b9sS4n6i9sgO4 zL5Pn)8tK!^ZO*UhwxI67r95K@>TJZ4W+}BMu0-)vH+&PMtfZ~-zP

2$m`K9tWNS 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 k=*Et_qE$WS>}aO{ MerkleSumTreeChip { /// /// | a | b | c | /// | ------------ | ------------- | ---------- | - /// | `current_balance` | `element_balance` | `0` | /// | `current_balance` | `element_balance` | `sum` | /// - /// At row 0 bool_and_swap_selector is enabled. - /// At row 1 sum_selector is enabled - /// If swap_bit is 0, the values will remain the same on the next row - /// If swap_bit is 1, the values will be swapped on the next row - pub fn swap_balances_per_level( + /// At row 0 sum_selector is enabled. + pub fn sum_balances_per_level( &self, mut layouter: impl Layouter, current_balance: &AssignedCell, element_balance: &AssignedCell, - swap_bit_assigned: &AssignedCell, ) -> Result, Error> { layouter.assign_region( - || "assign nodes balances per currency", + || "sum nodes balances per currency", |mut region| { - // enable the bool_and_swap_selector at row 0 - self.config.bool_and_swap_selector.enable(&mut region, 0)?; + // enable the sum_selector at row 0 + self.config.sum_selector.enable(&mut region, 0)?; // copy the current_balances to the column self.config.advice[0] at offset 0 - let l1 = current_balance.copy_advice( + let current_balance = current_balance.copy_advice( || "copy current balance from prev level", &mut region, self.config.advice[0], @@ -208,57 +203,23 @@ impl MerkleSumTreeChip { )?; // assign the element_balance to the column self.config.advice[1] at offset 0 - let r1 = element_balance.copy_advice( + let element_balance = element_balance.copy_advice( || "element balance", &mut region, self.config.advice[1], 0, )?; - // assign the swap_bit to the column self.config.advice[2] at offset 0 - let swap_bit = swap_bit_assigned.copy_advice( - || "swap bit", - &mut region, - self.config.advice[2], - 0, - )?; - - // Extract the value from the cell - let mut l1_val = l1.value().copied(); - let mut r1_val = r1.value().copied(); - - // perform the swap according to the swap bit - // if swap_bit is 0 return (l1, r1) else return (r1, l1) - swap_bit.value().copied().map(|x| { - (l1_val, r1_val) = if x == Fp::zero() { - (l1_val, r1_val) - } else { - (r1_val, l1_val) - }; - }); - - // Perform the assignment according to the swap at offset 1 - let _left_currency_balance = region.assign_advice( - || "assign left balance after swap", - self.config.advice[0], - 1, - || l1_val, - )?; - - let _right_currency_balance = region.assign_advice( - || "assign right balance after swap", - self.config.advice[1], - 1, - || r1_val, - )?; - - // enable the sum_selector at offset 1 - self.config.sum_selector.enable(&mut region, 1)?; + // Extract the values from the cell + let current_balance_val = current_balance.value().copied(); + let element_balance_val = element_balance.value().copied(); - // compute the sum of the two balances and assign it to the column self.config.advice[2] at offset 1 - let sum = l1_val.zip(r1_val).map(|(a, b)| a + b); + // compute the sum of the two balances and assign it to the column self.config.advice[2] at offset 0 + let sum = current_balance_val + .zip(element_balance_val) + .map(|(a, b)| a + b); let sum_cell = - region.assign_advice(|| "sum of balances", self.config.advice[2], 1, || sum)?; + region.assign_advice(|| "sum of balances", self.config.advice[2], 0, || sum)?; Ok(sum_cell) }, diff --git a/zk_prover/src/circuits/merkle_sum_tree.rs b/zk_prover/src/circuits/merkle_sum_tree.rs index 9787eb2..24846e9 100644 --- a/zk_prover/src/circuits/merkle_sum_tree.rs +++ b/zk_prover/src/circuits/merkle_sum_tree.rs @@ -459,18 +459,17 @@ where let mut next_balances = vec![]; - // For every level, perform the swap of the balances (between `current_balances` and `sibling_balances`) according to the swap bit + // For every level, perform sum the balances `current_balances` and `sibling_balances` for currency in 0..N_CURRENCIES { - let next_balance = merkle_sum_tree_chip.swap_balances_per_level( + let next_balance = merkle_sum_tree_chip.sum_balances_per_level( layouter.namespace(|| { format!( - "{}: currency {}: assign nodes balance", + "{}: currency {}: perform balance sum", namespace_prefix, currency ) }), ¤t_balances[currency], &sibling_balances[currency], - &swap_bit_level, )?; next_balances.push(next_balance); diff --git a/zk_prover/src/circuits/tests.rs b/zk_prover/src/circuits/tests.rs index e5f4bc7..cab5e15 100644 --- a/zk_prover/src/circuits/tests.rs +++ b/zk_prover/src/circuits/tests.rs @@ -19,7 +19,7 @@ mod test { const N_CURRENCIES: usize = 2; const LEVELS: usize = 4; - const N_BYTES: usize = 14; + const N_BYTES: usize = 8; const K: u32 = 11; #[test] @@ -198,15 +198,15 @@ mod test { VerifyFailure::Permutation { column: (Any::advice(), 2).into(), location: FailureLocation::InRegion { - region: (111, "assign nodes balances per currency").into(), - offset: 1 + region: (111, "sum nodes balances per currency").into(), + offset: 0 } }, VerifyFailure::Permutation { column: (Any::advice(), 2).into(), location: FailureLocation::InRegion { - region: (112, "assign nodes balances per currency").into(), - offset: 1 + region: (112, "sum nodes balances per currency").into(), + offset: 0 } }, VerifyFailure::Permutation { @@ -292,7 +292,7 @@ mod test { column: (Any::advice(), 0).into(), location: FailureLocation::InRegion { region: (21, "assign value to perform range check").into(), - offset: 14 + offset: 8 } }, ]) @@ -330,22 +330,6 @@ mod test { }, cell_values: vec![(((Any::advice(), 2).into(), 0).into(), "0x2".to_string()),] }, - VerifyFailure::ConstraintNotSatisfied { - constraint: ((6, "bool constraint").into(), 0, "").into(), - location: FailureLocation::InRegion { - region: (27, "assign nodes balances per currency").into(), - offset: 0 - }, - cell_values: vec![(((Any::advice(), 2).into(), 0).into(), "0x2".to_string()),] - }, - VerifyFailure::ConstraintNotSatisfied { - constraint: ((6, "bool constraint").into(), 0, "").into(), - location: FailureLocation::InRegion { - region: (28, "assign nodes balances per currency").into(), - offset: 0 - }, - cell_values: vec![(((Any::advice(), 2).into(), 0).into(), "0x2".to_string()),] - }, VerifyFailure::ConstraintNotSatisfied { constraint: ((7, "swap constraint").into(), 0, "").into(), location: FailureLocation::InRegion { @@ -396,58 +380,6 @@ mod test { (((Any::advice(), 2).into(), 0).into(), "0x2".to_string()), ] }, - VerifyFailure::ConstraintNotSatisfied { - constraint: ((7, "swap constraint").into(), 0, "").into(), - location: FailureLocation::InRegion { - region: (27, "assign nodes balances per currency").into(), - offset: 0 - }, - cell_values: vec![ - (((Any::advice(), 0).into(), 0).into(), "0x2e70".to_string()), - (((Any::advice(), 0).into(), 1).into(), "0x108ef".to_string()), - (((Any::advice(), 1).into(), 0).into(), "0x108ef".to_string()), - (((Any::advice(), 2).into(), 0).into(), "0x2".to_string()), - ] - }, - VerifyFailure::ConstraintNotSatisfied { - constraint: ((7, "swap constraint").into(), 1, "").into(), - location: FailureLocation::InRegion { - region: (27, "assign nodes balances per currency").into(), - offset: 0 - }, - cell_values: vec![ - (((Any::advice(), 0).into(), 0).into(), "0x2e70".to_string()), - (((Any::advice(), 1).into(), 0).into(), "0x108ef".to_string()), - (((Any::advice(), 1).into(), 1).into(), "0x2e70".to_string()), - (((Any::advice(), 2).into(), 0).into(), "0x2".to_string()), - ] - }, - VerifyFailure::ConstraintNotSatisfied { - constraint: ((7, "swap constraint").into(), 0, "").into(), - location: FailureLocation::InRegion { - region: (28, "assign nodes balances per currency").into(), - offset: 0 - }, - cell_values: vec![ - (((Any::advice(), 0).into(), 0).into(), "0xa0cb".to_string()), - (((Any::advice(), 0).into(), 1).into(), "0x48db".to_string()), - (((Any::advice(), 1).into(), 0).into(), "0x48db".to_string()), - (((Any::advice(), 2).into(), 0).into(), "0x2".to_string()), - ] - }, - VerifyFailure::ConstraintNotSatisfied { - constraint: ((7, "swap constraint").into(), 1, "").into(), - location: FailureLocation::InRegion { - region: (28, "assign nodes balances per currency").into(), - offset: 0 - }, - cell_values: vec![ - (((Any::advice(), 0).into(), 0).into(), "0xa0cb".to_string()), - (((Any::advice(), 1).into(), 0).into(), "0x48db".to_string()), - (((Any::advice(), 1).into(), 1).into(), "0xa0cb".to_string()), - (((Any::advice(), 2).into(), 0).into(), "0x2".to_string()), - ] - }, VerifyFailure::Permutation { column: (Any::advice(), 0).into(), location: FailureLocation::InRegion {