From 66c4f45e781b5866de77665a59bdce929e625c79 Mon Sep 17 00:00:00 2001 From: ts0yu <120932697+ts0yu@users.noreply.github.com> Date: Fri, 9 Aug 2024 15:12:00 +0000 Subject: [PATCH] Pending changes exported from your codespace --- Cargo.lock | 258 +++++++++++++------ Cargo.toml | 3 +- contracts/utils/src/LiquidityProvider.sol | 10 +- contracts/utils/test/LiquidityProvider.t.sol | 63 +++++ src/bindings/fetcher.rs | 3 + src/bindings/liquidityprovider.rs | 16 +- src/bindings/poolmanager.rs | 6 + src/lib.rs | 118 ++++----- src/liquidity_admin.rs | 10 +- 9 files changed, 321 insertions(+), 166 deletions(-) create mode 100644 contracts/utils/test/LiquidityProvider.t.sol diff --git a/Cargo.lock b/Cargo.lock index d35f90d..59ca27c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,9 +46,9 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096bfe5b4ae72138eab21ba5789e74e09f80461352b2261dfde69e7538f0b3f6" +checksum = "3f4a4aaae80afd4be443a6aecd92a6b255dcdd000f97996928efb33d8a71e100" dependencies = [ "alloy-consensus", "alloy-contract", @@ -64,11 +64,10 @@ dependencies = [ "alloy-serde", "alloy-signer", "alloy-signer-local", - "alloy-transport", - "alloy-transport-http", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", - "reqwest", ] [[package]] @@ -83,9 +82,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f63a6c9eb45684a5468536bc55379a2af0f45ffa5d756e4e4964532737e1836" +checksum = "04c309895995eaa4bfcc345f5515a39c7df9447798645cc8bf462b6c5bf1dc96" dependencies = [ "alloy-eips", "alloy-primitives", @@ -97,19 +96,20 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c26b7d34cb76f826558e9409a010e25257f7bfb5aa5e3dd0042c564664ae159" +checksum = "3f4e0ef72b0876ae3068b2ed7dfae9ae1779ce13cfaec2ee1f08f5bd0348dc57" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-network", + "alloy-network-primitives", "alloy-primitives", "alloy-provider", "alloy-pubsub", "alloy-rpc-types-eth", "alloy-sol-types", - "alloy-transport", + "alloy-transport 0.2.1", "futures", "futures-util", "thiserror", @@ -117,9 +117,9 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af3faff14c12c8b11037e0a093dd157c3702becb8435577a2408534d0758315" +checksum = "529fc6310dc1126c8de51c376cbc59c79c7f662bd742be7dc67055d5421a81b4" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -130,9 +130,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6e6436a9530f25010d13653e206fab4c9feddacf21a54de8d7311b275bc56b" +checksum = "413902aa18a97569e60f679c23f46a18db1656d87ab4d4e49d0e1e52042f66df" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -147,15 +147,16 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4b0fc6a572ef2eebda0a31a5e393d451abda703fec917c75d9615d8c978cf2" +checksum = "d9431c99a3b3fe606ede4b3d4043bdfbcb780c45b8d8d226c3804e2b75cfbe68" dependencies = [ "alloy-primitives", "alloy-rlp", "alloy-serde", "c-kzg", "derive_more", + "k256", "once_cell", "serde", "sha2", @@ -163,9 +164,9 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48450f9c6f0821c1eee00ed912942492ed4f11dd69532825833de23ecc7a2256" +checksum = "79614dfe86144328da11098edcc7bc1a3f25ad8d3134a9eb9e857e06f0d9840d" dependencies = [ "alloy-primitives", "alloy-serde", @@ -174,9 +175,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" +checksum = "bc05b04ac331a9f07e3a4036ef7926e49a8bf84a99a1ccfc7e2ab55a5fcbb372" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -197,15 +198,30 @@ dependencies = [ "tracing", ] +[[package]] +name = "alloy-json-rpc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57e2865c4c3bb4cdad3f0d9ec1ab5c0c657ba69a375651bd35e32fb6c180ccc2" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "serde", + "serde_json", + "thiserror", + "tracing", +] + [[package]] name = "alloy-network" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a20eba9bc551037f0626d6d29e191888638d979943fa4e842e9e6fc72bf0565" +checksum = "6e701fc87ef9a3139154b0b4ccb935b565d27ffd9de020fe541bf2dec5ae4ede" dependencies = [ "alloy-consensus", "alloy-eips", - "alloy-json-rpc", + "alloy-json-rpc 0.2.1", + "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-eth", "alloy-serde", @@ -217,11 +233,22 @@ dependencies = [ "thiserror", ] +[[package]] +name = "alloy-network-primitives" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9d5a0f9170b10988b6774498a022845e13eda94318440d17709d50687f67f9" +dependencies = [ + "alloy-primitives", + "alloy-serde", + "serde", +] + [[package]] name = "alloy-node-bindings" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e07c66b8b0ba8c87461a15fe3247c5b46fb500e103111b0ad4798738e45b1e" +checksum = "16faebb9ea31a244fd6ce3288d47df4be96797d9c3c020144b8f2c31543a4512" dependencies = [ "alloy-genesis", "alloy-primitives", @@ -235,9 +262,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", "bytes", @@ -257,15 +284,16 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad5d89acb7339fad13bc69e7b925232f242835bfd91c82fcb9326b36481bd0f0" +checksum = "3f9c0ab10b93de601a6396fc7ff2ea10d3b28c46f079338fa562107ebf9857c8" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", - "alloy-json-rpc", + "alloy-json-rpc 0.2.1", "alloy-network", + "alloy-network-primitives", "alloy-node-bindings", "alloy-primitives", "alloy-pubsub", @@ -273,8 +301,8 @@ dependencies = [ "alloy-rpc-types-anvil", "alloy-rpc-types-eth", "alloy-signer-local", - "alloy-transport", - "alloy-transport-http", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", "async-stream", @@ -295,13 +323,13 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034258dfaa51c278e1f7fcc46e587d10079ec9372866fa48c5df9d908fc1f6b1" +checksum = "3f5da2c55cbaf229bad3c5f8b00b5ab66c74ef093e5f3a753d874cfecf7d2281" dependencies = [ - "alloy-json-rpc", + "alloy-json-rpc 0.2.1", "alloy-primitives", - "alloy-transport", + "alloy-transport 0.2.1", "bimap", "futures", "serde", @@ -336,15 +364,15 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ce003e8c74bbbc7d4235131c1d6b7eaf14a533ae850295b90d240340989cb" +checksum = "5b38e3ffdb285df5d9f60cb988d336d9b8e3505acb78750c3bc60336a7af41d3" dependencies = [ - "alloy-json-rpc", + "alloy-json-rpc 0.2.1", "alloy-primitives", "alloy-pubsub", - "alloy-transport", - "alloy-transport-http", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", "futures", @@ -361,20 +389,21 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dfa1dd3e0bc3a3d89744fba8d1511216e83257160da2cd028a18b7d9c026030" +checksum = "e6c31a3750b8f5a350d17354e46a52b0f2f19ec5f2006d816935af599dedc521" dependencies = [ "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", + "serde", ] [[package]] name = "alloy-rpc-types-anvil" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f67aec11f9f3bc5e96c2b7f342dba6e9541a8a48d2cfbe27b6b195136aa18eee" +checksum = "52ab6509cd38b2e8c8da726e0f61c1e314a81df06a38d37ddec8bced3f8d25ed" dependencies = [ "alloy-primitives", "alloy-serde", @@ -383,9 +412,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc40df2dda7561d1406d0bee1d19c8787483a2cf2ee8011c05909475e7bc102d" +checksum = "ff63f51b2fb2f547df5218527fd0653afb1947bf7fead5b3ce58c75d170b30f7" dependencies = [ "alloy-consensus", "alloy-eips", @@ -401,12 +430,13 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd7aa9ff9e67f1ba7ee0dd8cebfc95831d1649b0e4eeefae940dc3681079fa" +checksum = "81e18424d962d7700a882fe423714bd5b9dde74c7a7589d4255ea64068773aef" dependencies = [ "alloy-consensus", "alloy-eips", + "alloy-network-primitives", "alloy-primitives", "alloy-rlp", "alloy-serde", @@ -419,9 +449,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8913f9e825068d77c516188c221c44f78fd814fce8effe550a783295a2757d19" +checksum = "e33feda6a53e6079895aed1d08dcb98a1377b000d80d16370fbbdb8155d547ef" dependencies = [ "alloy-primitives", "serde", @@ -430,9 +460,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f740e13eb4c6a0e4d0e49738f1e86f31ad2d7ef93be499539f492805000f7237" +checksum = "740a25b92e849ed7b0fa013951fe2f64be9af1ad5abe805037b44fb7770c5c47" dependencies = [ "alloy-primitives", "async-trait", @@ -444,9 +474,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87db68d926887393a1d0f9c43833b44446ea29d603291e7b20e5d115f31aa4e3" +checksum = "1b0707d4f63e4356a110b30ef3add8732ab6d181dd7be4607bf79b8777105cee" dependencies = [ "alloy-consensus", "alloy-network", @@ -460,9 +490,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bad41a7c19498e3f6079f7744656328699f8ea3e783bdd10d85788cd439f572" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -474,9 +504,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -493,9 +523,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" dependencies = [ "alloy-json-abi", "const-hex", @@ -510,18 +540,19 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" +checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" dependencies = [ + "serde", "winnow 0.6.13", ] [[package]] name = "alloy-sol-types" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -536,7 +567,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd9773e4ec6832346171605c776315544bd06e40f803e7b5b7824b325d5442ca" dependencies = [ - "alloy-json-rpc", + "alloy-json-rpc 0.1.3", "base64 0.22.1", "futures-util", "futures-utils-wasm", @@ -548,14 +579,48 @@ dependencies = [ "url", ] +[[package]] +name = "alloy-transport" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d0590afbdacf2f8cca49d025a2466f3b6584a016a8b28f532f29f8da1007bae" +dependencies = [ + "alloy-json-rpc 0.2.1", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", + "url", +] + [[package]] name = "alloy-transport-http" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff8ef947b901c0d4e97370f9fa25844cf8b63b1a58fd4011ee82342dc8a9fc6b" dependencies = [ - "alloy-json-rpc", - "alloy-transport", + "alloy-json-rpc 0.1.3", + "alloy-transport 0.1.3", + "reqwest", + "serde_json", + "tower", + "tracing", + "url", +] + +[[package]] +name = "alloy-transport-http" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2437d145d80ea1aecde8574d2058cceb8b3c9cba05f6aea8e67907c660d46698" +dependencies = [ + "alloy-json-rpc 0.2.1", + "alloy-transport 0.2.1", "reqwest", "serde_json", "tower", @@ -565,13 +630,13 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb40ee66887a66d875a5bb5e01cee4c9a467c263ef28c865cd4b0ebf15f705af" +checksum = "804494366e20468776db4e18f9eb5db7db0fe14f1271eb6dbf155d867233405c" dependencies = [ - "alloy-json-rpc", + "alloy-json-rpc 0.2.1", "alloy-pubsub", - "alloy-transport", + "alloy-transport 0.2.1", "bytes", "futures", "interprocess", @@ -584,12 +649,12 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d92049d6642a18c9849ce7659430151e7c92b51552a0cabdc038c1af4cd7308" +checksum = "af855163e7df008799941aa6dd324a43ef2bf264b08ba4b22d44aad6ced65300" dependencies = [ "alloy-pubsub", - "alloy-transport", + "alloy-transport 0.2.1", "futures", "http 1.1.0", "rustls", @@ -661,7 +726,7 @@ version = "0.1.0" dependencies = [ "alloy", "alloy-sol-types", - "alloy-transport-http", + "alloy-transport-http 0.1.3", "anyhow", "async-trait", "bytes", @@ -677,6 +742,7 @@ dependencies = [ "serde_json", "tokio", "tracing", + "tracing-subscriber", ] [[package]] @@ -1926,6 +1992,15 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "memchr" version = "2.7.4" @@ -2398,7 +2473,7 @@ dependencies = [ "rand", "rand_chacha", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.8.4", "rusty-fork", "tempfile", "unarray", @@ -2497,8 +2572,17 @@ checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -2509,9 +2593,15 @@ checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.4", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.4" @@ -3132,9 +3222,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d71e19bca02c807c9faa67b5a47673ff231b6e7449b251695188522f1dc44b2" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" dependencies = [ "paste", "proc-macro2", @@ -3447,10 +3537,14 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] diff --git a/Cargo.toml b/Cargo.toml index c578c2d..3398225 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ version = "0.1.0" edition = "2021" [dependencies] -alloy = { version = "0.1.3", features = ["rlp", "node-bindings", "sol-types", "contract", "transports", "transport-http", "rpc"] } +alloy = { version = "0.2.1", features = ["rlp", "node-bindings", "sol-types", "contract", "transports", "transport-http", "rpc", "providers"] } tokio = { version = "1.36.0", features = ["full"] } revm = "10.0.0" octane = { git = "https://github.com/arena-rs/octane" } @@ -24,6 +24,7 @@ futures = "0.3.30" rand = "0.8.5" rand_distr = "0.4.3" bytes = "1.6.1" +tracing-subscriber = { version = "0.3", features = ["env-filter"] } [lib] doctest = false diff --git a/contracts/utils/src/LiquidityProvider.sol b/contracts/utils/src/LiquidityProvider.sol index 0f851e1..94abca1 100644 --- a/contracts/utils/src/LiquidityProvider.sol +++ b/contracts/utils/src/LiquidityProvider.sol @@ -59,7 +59,7 @@ contract LiquidityProvider is PoolTestBase { } function unlockCallback(bytes calldata rawData) external returns (bytes memory) { - require(msg.sender == address(manager)); + require(msg.sender == address(manager), "error 0"); CallbackData memory data = abi.decode(rawData, (CallbackData)); @@ -81,11 +81,11 @@ contract LiquidityProvider is PoolTestBase { ); if (data.params.liquidityDelta < 0) { - assert(delta0 > 0 || delta1 > 0); - assert(!(delta0 < 0 || delta1 < 0)); + require(delta0 > 0 || delta1 > 0, "error 1"); + require(!(delta0 < 0 || delta1 < 0), "error 2"); } else if (data.params.liquidityDelta > 0) { - assert(delta0 < 0 || delta1 < 0); - assert(!(delta0 > 0 || delta1 > 0)); + require(delta0 < 0 || delta1 < 0, "error 3"); + require(!(delta0 > 0 || delta1 > 0), "error 4"); } if (delta0 < 0) data.key.currency0.settle(manager, data.sender, uint256(-delta0), data.settleUsingBurn); diff --git a/contracts/utils/test/LiquidityProvider.t.sol b/contracts/utils/test/LiquidityProvider.t.sol new file mode 100644 index 0000000..910adc6 --- /dev/null +++ b/contracts/utils/test/LiquidityProvider.t.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {IPoolManager} from "v4-core/interfaces/IPoolManager.sol"; +import {PoolManager} from "v4-core/PoolManager.sol"; +import {PoolKey} from "v4-core/types/PoolKey.sol"; +import {LiquidityProvider} from "../src/LiquidityProvider.sol"; +import {ArenaToken} from "../src/ArenaToken.sol"; +import {IHooks} from "v4-core/interfaces/IHooks.sol"; +import {PoolKey} from "v4-core/types/PoolKey.sol"; +import {CurrencyLibrary, Currency} from "v4-core/types/Currency.sol"; +import "forge-std/Test.sol"; + +contract LiquidityProviderTest is Test { + PoolManager public manager; + LiquidityProvider public lpRouter; + ArenaToken public token0; + ArenaToken public token1; + + function test_createLiquidity() external { + vm.startPrank(address(0x1)); // Set caller one's address + + manager = new PoolManager(5000); + lpRouter = new LiquidityProvider(manager); + + token0 = new ArenaToken("Token0", "T0", 18); + token1 = new ArenaToken("Token1", "T1", 18); + + if (address(token0) > address(token1)) { + (token0, token1) = (token1, token0); + } + + PoolKey memory pool = PoolKey({ + currency0: Currency.wrap(address(token0)), + currency1: Currency.wrap(address(token1)), + fee: 3000, + tickSpacing: 60, + hooks: IHooks(address(0x0)) + }); + + manager.initialize(pool, 79228162514264337593543950336, ""); + + vm.stopPrank(); + vm.startPrank(address(0x2)); + + token0.mint(2 ** 255); + token1.mint(2 ** 255); + + token0.approve(address(lpRouter), type(uint256).max); + token1.approve(address(lpRouter), type(uint256).max); + + IPoolManager.ModifyLiquidityParams memory params = IPoolManager.ModifyLiquidityParams({ + tickLower: -120, + tickUpper: 120, + liquidityDelta: 1e18, + salt: "" + }); + + lpRouter.modifyLiquidity(pool, params, ""); + + vm.stopPrank(); + } +} \ No newline at end of file diff --git a/src/bindings/fetcher.rs b/src/bindings/fetcher.rs index df47d9d..b8b1758 100644 --- a/src/bindings/fetcher.rs +++ b/src/bindings/fetcher.rs @@ -253,6 +253,7 @@ pub mod Fetcher { } #[automatically_derived] impl alloy_sol_types::SolType for Currency { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = alloy::sol_types::private::Address; type Token<'a> = ::Token<'a>; @@ -357,6 +358,7 @@ pub mod Fetcher { } #[automatically_derived] impl alloy_sol_types::SolType for PoolId { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = alloy::sol_types::private::FixedBytes<32>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; @@ -516,6 +518,7 @@ pub mod Fetcher { } #[automatically_derived] impl alloy_sol_types::SolType for PoolKey { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = Self; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; const SOL_NAME: &'static str = ::NAME; diff --git a/src/bindings/liquidityprovider.rs b/src/bindings/liquidityprovider.rs index ed697e9..7d4feaf 100644 --- a/src/bindings/liquidityprovider.rs +++ b/src/bindings/liquidityprovider.rs @@ -249,20 +249,20 @@ pub mod LiquidityProvider { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a0604052348015600e575f80fd5b506040516116ad3803806116ad833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516115e46100c95f395f818160790152818160f50152818161022d01528181610294015281816102c501528181610390015281816104fa01528181610550015281816105bf015281816106100152818161077a01526107ad01526115e45ff3fe60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b610055610050366004611035565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c13660046110bb565b61020a565b3480156100d1575f80fd5b506100e56100e0366004611118565b610220565b60405161005f91906111b2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c919061120e565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161019791906111b2565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d991908101906112aa565b8060200190518101906101ec919061131e565b9050478015610200576102005f3383610662565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610256575f80fd5b5f61026383850185611335565b90505f6102be610278836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b815260040161031f939291906113fc565b60408051808303815f875af115801561033a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035e919061144b565b5090505f6103ba610374856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f6103d485602001515f0151865f015130610753565b925050505f6103ef866020015160200151875f015130610753565b9250505082600f0b86604001516040015186600f0b61040e9190611481565b1461045f5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f7272656374000000000000604482015260640160405180910390fd5b5f86604001516040015112156104a7575f82138061047c57505f81135b610488576104886114a8565b5f82128061049557505f81125b156104a2576104a26114a8565b6104ea565b5f86604001516040015113156104ea575f8212806104c457505f81125b6104d0576104d06114a8565b5f8213806104dd57505f81135b156104ea576104ea6114a8565b5f821215610540578551610540907f000000000000000000000000000000000000000000000000000000000000000090610523856114bc565b60808a015160208b0151516001600160a01b0316939291906107df565b5f811215610598578551610598907f000000000000000000000000000000000000000000000000000000000000000090610579846114bc565b60808a01516020808c015101516001600160a01b0316939291906107df565b5f8213156105e757855160a08701516020880151516105e7926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610aab565b5f81131561063857855160a08701516020808901510151610638926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610aab565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610695575f805f8085875af1905080610690576106906356cdd02560e11b610b7d565b6106f6565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806106f6576106f6632745a14f60e21b610b7d565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906107408a8a83610baa565b919c909b50909950975050505050505050565b5f80806107696001600160a01b03871686610c4d565b925061079e6001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610c4d565b91506107d46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610cdc565b905093509350939050565b801561087457836001600160a01b031663f5298aca8461080e886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610859575f80fd5b505af115801561086b573d5f803e3d5ffd5b50505050610aa4565b6001600160a01b0385166108eb57836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af11580156108c0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e5919061131e565b50610aa4565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b15801561092b575f80fd5b505af115801561093d573d5f803e3d5ffd5b505050506001600160a01b03831630146109cf576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af11580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906114d6565b50610a41565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f91906114d6565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610a7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa2919061131e565b505b5050505050565b80610aed57604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610842565b836001600160a01b031663156e29f684610b16886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610b60575f80fd5b505af1158015610b72573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610bb88686610d73565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610c06573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c2d91908101906114f1565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610c6d57506001600160a01b0381163161065c565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd5919061131e565b905061065c565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610d2b91815260200190565b602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a919061131e565b95945050505050565b5f80610d7e84610dc3565b90505f610d8c60068361159b565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610de2908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610e3557610e35610dff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610e6357610e63610dff565b604052919050565b6001600160a01b0381168114610e7f575f80fd5b50565b8035600281900b8114610e93575f80fd5b919050565b5f60a08284031215610ea8575f80fd5b60405160a081016001600160401b0381118282101715610eca57610eca610dff565b6040529050808235610edb81610e6b565b81526020830135610eeb81610e6b565b6020820152604083013562ffffff81168114610f05575f80fd5b6040820152610f1660608401610e82565b60608201526080830135610f2981610e6b565b6080919091015292915050565b5f60808284031215610f46575f80fd5b604051608081016001600160401b0381118282101715610f6857610f68610dff565b604052905080610f7783610e82565b8152610f8560208401610e82565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b03821115610fbd57610fbd610dff565b50601f01601f191660200190565b5f82601f830112610fda575f80fd5b8135610fed610fe882610fa5565b610e3b565b818152846020838601011115611001575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610e7f575f80fd5b8035610e938161101d565b5f805f805f610180868803121561104a575f80fd5b6110548787610e98565b94506110638760a08801610f36565b93506101208601356001600160401b0381111561107e575f80fd5b61108a88828901610fcb565b93505061014086013561109c8161101d565b91506101608601356110ad8161101d565b809150509295509295909350565b5f805f61014084860312156110ce575f80fd5b6110d88585610e98565b92506110e78560a08601610f36565b91506101208401356001600160401b03811115611102575f80fd5b61110e86828701610fcb565b9150509250925092565b5f8060208385031215611129575f80fd5b82356001600160401b0381111561113e575f80fd5b8301601f8101851361114e575f80fd5b80356001600160401b03811115611163575f80fd5b856020828401011115611174575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111c46020830184611184565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061123460408401826111cb565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a06101608401526112846101c0840182611184565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f602082840312156112ba575f80fd5b81516001600160401b038111156112cf575f80fd5b8201601f810184136112df575f80fd5b80516112ed610fe882610fa5565b818152856020838501011115611301575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f6020828403121561132e575f80fd5b5051919050565b5f60208284031215611345575f80fd5b81356001600160401b0381111561135a575f80fd5b82016101a0818503121561136c575f80fd5b611374610e13565b813561137f81610e6b565b815261138e8560208401610e98565b60208201526113a08560c08401610f36565b60408201526101408201356001600160401b038111156113be575f80fd5b6113ca86828501610fcb565b6060830152506113dd610160830161102a565b60808201526113ef610180830161102a565b60a0820152949350505050565b61140681856111cb565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610d6a610140830184611184565b5f806040838503121561145c575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f8312801582168215821617156114a0576114a061146d565b505092915050565b634e487b7160e01b5f52600160045260245ffd5b5f600160ff1b82016114d0576114d061146d565b505f0390565b5f602082840312156114e6575f80fd5b81516111c48161101d565b5f60208284031215611501575f80fd5b81516001600160401b03811115611516575f80fd5b8201601f81018413611526575f80fd5b80516001600160401b0381111561153f5761153f610dff565b8060051b61154f60208201610e3b565b9182526020818401810192908101908784111561156a575f80fd5b6020850194505b8385101561159057845180835260209586019590935090910190611571565b979650505050505050565b8082018082111561065c5761065c61146d56fea2646970667358221220d0280ae4dfaa07bdb4ea723f71cb4a3c8a23c44cdee64b36814ada54912279ee64736f6c634300081a0033 + ///0x60a0604052348015600e575f80fd5b50604051611770380380611770833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516116a76100c95f395f818160790152818160f50152818161022d015281816102c7015281816102f8015281816103c3015281816105d10152818161062701528181610696015281816106e701528181610851015261088401526116a75ff3fe60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b61005561005036600461110c565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c1366004611192565b61020a565b3480156100d1575f80fd5b506100e56100e03660046111ef565b610220565b60405161005f9190611289565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c91906112e5565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016101979190611289565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d99190810190611381565b8060200190518101906101ec91906113f5565b9050478015610200576102005f3383610739565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102895760405162461bcd60e51b815260206004820152600760248201526606572726f7220360cc1b60448201526064015b60405180910390fd5b5f6102968385018561140c565b90505f6102f16102ab836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916107d3565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b8152600401610352939291906114d3565b60408051808303815f875af115801561036d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103919190611522565b5090505f6103ed6103a7856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916107d3565b505090505f61040785602001515f0151865f01513061082a565b925050505f610422866020015160200151875f01513061082a565b9250505082600f0b86604001516040015186600f0b6104419190611558565b1461048e5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f72726563740000000000006044820152606401610280565b5f866040015160400151121561052a575f8213806104ab57505f81135b6104e15760405162461bcd60e51b81526020600482015260076024820152666572726f72203160c81b6044820152606401610280565b5f8212806104ee57505f81125b156105255760405162461bcd60e51b815260206004820152600760248201526632b93937b9101960c91b6044820152606401610280565b6105c1565b5f86604001516040015113156105c1575f82128061054757505f81125b61057d5760405162461bcd60e51b81526020600482015260076024820152666572726f72203360c81b6044820152606401610280565b5f82138061058a57505f81135b156105c15760405162461bcd60e51b8152602060048201526007602482015266195c9c9bdc880d60ca1b6044820152606401610280565b5f821215610617578551610617907f0000000000000000000000000000000000000000000000000000000000000000906105fa8561157f565b60808a015160208b0151516001600160a01b0316939291906108b6565b5f81121561066f57855161066f907f0000000000000000000000000000000000000000000000000000000000000000906106508461157f565b60808a01516020808c015101516001600160a01b0316939291906108b6565b5f8213156106be57855160a08701516020880151516106be926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610b82565b5f81131561070f57855160a0870151602080890151015161070f926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610b82565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b03841661076c575f805f8085875af1905080610767576107676356cdd02560e11b610c54565b6107cd565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806107cd576107cd632745a14f60e21b610c54565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906108178a8a83610c81565b919c909b50909950975050505050505050565b5f80806108406001600160a01b03871686610d24565b92506108756001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610d24565b91506108ab6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610db3565b905093509350939050565b801561094b57836001600160a01b031663f5298aca846108e5886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610930575f80fd5b505af1158015610942573d5f803e3d5ffd5b50505050610b7b565b6001600160a01b0385166109c257836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015610997573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906109bc91906113f5565b50610b7b565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015610a02575f80fd5b505af1158015610a14573d5f803e3d5ffd5b505050506001600160a01b0383163014610aa6576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af1158015610a7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa09190611599565b50610b18565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610af2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b169190611599565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610b55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7991906113f5565b505b5050505050565b80610bc457604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610919565b836001600160a01b031663156e29f684610bed886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610c37575f80fd5b505af1158015610c49573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610c8f8686610e4a565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610cdd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d0491908101906115b4565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610d4457506001600160a01b03811631610733565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906113f5565b9050610733565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610e0291815260200190565b602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4191906113f5565b95945050505050565b5f80610e5584610e9a565b90505f610e6360068361165e565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610eb9908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610f0c57610f0c610ed6565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f3a57610f3a610ed6565b604052919050565b6001600160a01b0381168114610f56575f80fd5b50565b8035600281900b8114610f6a575f80fd5b919050565b5f60a08284031215610f7f575f80fd5b60405160a081016001600160401b0381118282101715610fa157610fa1610ed6565b6040529050808235610fb281610f42565b81526020830135610fc281610f42565b6020820152604083013562ffffff81168114610fdc575f80fd5b6040820152610fed60608401610f59565b6060820152608083013561100081610f42565b6080919091015292915050565b5f6080828403121561101d575f80fd5b604051608081016001600160401b038111828210171561103f5761103f610ed6565b60405290508061104e83610f59565b815261105c60208401610f59565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b0382111561109457611094610ed6565b50601f01601f191660200190565b5f82601f8301126110b1575f80fd5b81356110c46110bf8261107c565b610f12565b8181528460208386010111156110d8575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610f56575f80fd5b8035610f6a816110f4565b5f805f805f6101808688031215611121575f80fd5b61112b8787610f6f565b945061113a8760a0880161100d565b93506101208601356001600160401b03811115611155575f80fd5b611161888289016110a2565b935050610140860135611173816110f4565b9150610160860135611184816110f4565b809150509295509295909350565b5f805f61014084860312156111a5575f80fd5b6111af8585610f6f565b92506111be8560a0860161100d565b91506101208401356001600160401b038111156111d9575f80fd5b6111e5868287016110a2565b9150509250925092565b5f8060208385031215611200575f80fd5b82356001600160401b03811115611215575f80fd5b8301601f81018513611225575f80fd5b80356001600160401b0381111561123a575f80fd5b85602082840101111561124b575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61129b602083018461125b565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061130b60408401826112a2565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a061016084015261135b6101c084018261125b565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f60208284031215611391575f80fd5b81516001600160401b038111156113a6575f80fd5b8201601f810184136113b6575f80fd5b80516113c46110bf8261107c565b8181528560208385010111156113d8575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215611405575f80fd5b5051919050565b5f6020828403121561141c575f80fd5b81356001600160401b03811115611431575f80fd5b82016101a08185031215611443575f80fd5b61144b610eea565b813561145681610f42565b81526114658560208401610f6f565b60208201526114778560c0840161100d565b60408201526101408201356001600160401b03811115611495575f80fd5b6114a1868285016110a2565b6060830152506114b46101608301611101565b60808201526114c66101808301611101565b60a0820152949350505050565b6114dd81856112a2565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610e4161014083018461125b565b5f8060408385031215611533575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f83128015821682158216171561157757611577611544565b505092915050565b5f600160ff1b820161159357611593611544565b505f0390565b5f602082840312156115a9575f80fd5b815161129b816110f4565b5f602082840312156115c4575f80fd5b81516001600160401b038111156115d9575f80fd5b8201601f810184136115e9575f80fd5b80516001600160401b0381111561160257611602610ed6565b8060051b61161260208201610f12565b9182526020818401810192908101908784111561162d575f80fd5b6020850194505b8385101561165357845180835260209586019590935090910190611634565b979650505050505050565b808201808211156107335761073361154456fea2646970667358221220a652690e793e1d7720a839f054e26dce04db15862da233006ef3a3de33b8c13a64736f6c634300081a0033 /// ``` #[rustfmt::skip] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA0`@R4\x80\x15`\x0EW_\x80\xFD[P`@Qa\x16\xAD8\x03\x80a\x16\xAD\x839\x81\x01`@\x81\x90R`+\x91`;V[`\x01`\x01`\xA0\x1B\x03\x16`\x80R`fV[_` \x82\x84\x03\x12\x15`JW_\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14`_W_\x80\xFD[\x93\x92PPPV[`\x80Qa\x15\xE4a\0\xC9_9_\x81\x81`y\x01R\x81\x81`\xF5\x01R\x81\x81a\x02-\x01R\x81\x81a\x02\x94\x01R\x81\x81a\x02\xC5\x01R\x81\x81a\x03\x90\x01R\x81\x81a\x04\xFA\x01R\x81\x81a\x05P\x01R\x81\x81a\x05\xBF\x01R\x81\x81a\x06\x10\x01R\x81\x81a\x07z\x01Ra\x07\xAD\x01Ra\x15\xE4_\xF3\xFE`\x80`@R`\x046\x10a\0>W_5`\xE0\x1C\x80c\n[\x11\xE4\x14a\0BW\x80cH\x1Cju\x14a\0hW\x80cZk\xCF\xDA\x14a\0\xB3W\x80c\x91\xDDsF\x14a\0\xC6W[_\x80\xFD[a\0Ua\0P6`\x04a\x105V[a\0\xF2V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0sW_\x80\xFD[Pa\0\x9B\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0_V[a\0Ua\0\xC16`\x04a\x10\xBBV[a\x02\nV[4\x80\x15a\0\xD1W_\x80\xFD[Pa\0\xE5a\0\xE06`\x04a\x11\x18V[a\x02 V[`@Qa\0_\x91\x90a\x11\xB2V[_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cH\xC8\x94\x91`@Q\x80`\xC0\x01`@R\x803`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x15\x15\x81R` \x01\x85\x15\x15\x81RP`@Q` \x01a\x01l\x91\x90a\x12\x0EV[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x01\x97\x91\x90a\x11\xB2V[_`@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x01\xB2W=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x01\xD9\x91\x90\x81\x01\x90a\x12\xAAV[\x80` \x01\x90Q\x81\x01\x90a\x01\xEC\x91\x90a\x13\x1EV[\x90PG\x80\x15a\x02\0Wa\x02\0_3\x83a\x06bV[P\x95\x94PPPPPV[_a\x02\x18\x84\x84\x84_\x80a\0\xF2V[\x94\x93PPPPV[``3`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x02VW_\x80\xFD[_a\x02c\x83\x85\x01\x85a\x135V[\x90P_a\x02\xBEa\x02x\x83` \x01Q`\xA0\x90 \x90V[`@\x84\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x06\xFCV[PP\x90P_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cZk\xCF\xDA\x84` \x01Q\x85`@\x01Q\x86``\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x03\x1F\x93\x92\x91\x90a\x13\xFCV[`@\x80Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x03:W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03^\x91\x90a\x14KV[P\x90P_a\x03\xBAa\x03t\x85` \x01Q`\xA0\x90 \x90V[`@\x86\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x06\xFCV[PP\x90P_a\x03\xD4\x85` \x01Q_\x01Q\x86_\x01Q0a\x07SV[\x92PPP_a\x03\xEF\x86` \x01Q` \x01Q\x87_\x01Q0a\x07SV[\x92PPP\x82`\x0F\x0B\x86`@\x01Q`@\x01Q\x86`\x0F\x0Ba\x04\x0E\x91\x90a\x14\x81V[\x14a\x04_W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7Fliquidity change incorrect\0\0\0\0\0\0`D\x82\x01R`d\x01`@Q\x80\x91\x03\x90\xFD[_\x86`@\x01Q`@\x01Q\x12\x15a\x04\xA7W_\x82\x13\x80a\x04|WP_\x81\x13[a\x04\x88Wa\x04\x88a\x14\xA8V[_\x82\x12\x80a\x04\x95WP_\x81\x12[\x15a\x04\xA2Wa\x04\xA2a\x14\xA8V[a\x04\xEAV[_\x86`@\x01Q`@\x01Q\x13\x15a\x04\xEAW_\x82\x12\x80a\x04\xC4WP_\x81\x12[a\x04\xD0Wa\x04\xD0a\x14\xA8V[_\x82\x13\x80a\x04\xDDWP_\x81\x13[\x15a\x04\xEAWa\x04\xEAa\x14\xA8V[_\x82\x12\x15a\x05@W\x85Qa\x05@\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05#\x85a\x14\xBCV[`\x80\x8A\x01Q` \x8B\x01QQ`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x07\xDFV[_\x81\x12\x15a\x05\x98W\x85Qa\x05\x98\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05y\x84a\x14\xBCV[`\x80\x8A\x01Q` \x80\x8C\x01Q\x01Q`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x07\xDFV[_\x82\x13\x15a\x05\xE7W\x85Q`\xA0\x87\x01Q` \x88\x01QQa\x05\xE7\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x86\x90a\n\xABV[_\x81\x13\x15a\x068W\x85Q`\xA0\x87\x01Q` \x80\x89\x01Q\x01Qa\x068\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x85\x90a\n\xABV[`@\x80Q` \x81\x01\x86\x90R\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96PPPPPPP[\x92\x91PPV[_`\x01`\x01`\xA0\x1B\x03\x84\x16a\x06\x95W_\x80_\x80\x85\x87Z\xF1\x90P\x80a\x06\x90Wa\x06\x90cV\xCD\xD0%`\xE1\x1Ba\x0B}V[a\x06\xF6V[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91P_\x81R_` \x82\x01R_`@\x82\x01RP\x80a\x06\xF6Wa\x06\xF6c'E\xA1O`\xE2\x1Ba\x0B}V[PPPPV[`@\x80Q`&\x81\x01\x83\x90R`\x06\x81\x01\x84\x90R`\x03\x81\x01\x85\x90R\x85\x81R`:`\x0C\x82\x01 _\x92\x82\x01\x83\x90R` \x82\x01\x83\x90R\x90\x82\x90R\x81\x90\x81\x90a\x07@\x8A\x8A\x83a\x0B\xAAV[\x91\x9C\x90\x9BP\x90\x99P\x97PPPPPPPPV[_\x80\x80a\x07i`\x01`\x01`\xA0\x1B\x03\x87\x16\x86a\x0CMV[\x92Pa\x07\x9E`\x01`\x01`\xA0\x1B\x03\x87\x16\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x0CMV[\x91Pa\x07\xD4`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x85\x88a\x0C\xDCV[\x90P\x93P\x93P\x93\x90PV[\x80\x15a\x08tW\x83`\x01`\x01`\xA0\x1B\x03\x16c\xF5)\x8A\xCA\x84a\x08\x0E\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01[_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\x08YW_\x80\xFD[PZ\xF1\x15\x80\x15a\x08kW=_\x80>=_\xFD[PPPPa\n\xA4V[`\x01`\x01`\xA0\x1B\x03\x85\x16a\x08\xEBW\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x08\xC0W=_\x80>=_\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xE5\x91\x90a\x13\x1EV[Pa\n\xA4V[`@Qc)a\x04e`\xE2\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x85\x16\x90c\xA5\x84\x11\x94\x90`$\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\t+W_\x80\xFD[PZ\xF1\x15\x80\x15a\t=W=_\x80>=_\xFD[PPPP`\x01`\x01`\xA0\x1B\x03\x83\x160\x14a\t\xCFW`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16`\x04\x83\x01R\x85\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x86\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\t\xA5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xC9\x91\x90a\x14\xD6V[Pa\nAV[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`$\x82\x01\x84\x90R\x86\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n\x1BW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n?\x91\x90a\x14\xD6V[P[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n~W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xA2\x91\x90a\x13\x1EV[P[PPPPPV[\x80a\n\xEDW`@Qc\x0B\r\x9C\t`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x84\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x85\x16\x90c\x0B\r\x9C\t\x90`d\x01a\x08BV[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x15n)\xF6\x84a\x0B\x16\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\x0B`W_\x80\xFD[PZ\xF1\x15\x80\x15a\x0BrW=_\x80>=_\xFD[PPPPPPPPPV[=`@Q\x82\x81R` `\x04\x82\x01R\x81`$\x82\x01R\x81_`D\x83\x01>` \x80`\x1F\x84\x01\x04\x02`D\x01\x91P\x81\x81\xFD[_\x80_\x80a\x0B\xB8\x86\x86a\rsV[`@Qc\x1A\xFE\xB1\x8D`\xE1\x1B\x81R`\x04\x81\x01\x82\x90R`\x03`$\x82\x01R\x90\x91P_\x90`\x01`\x01`\xA0\x1B\x03\x89\x16\x90c5\xFDc\x1A\x90`D\x01_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\x06W=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x0C-\x91\x90\x81\x01\x90a\x14\xF1V[` \x81\x01Q`@\x82\x01Q``\x90\x92\x01Q\x90\x9A\x91\x99P\x97P\x95PPPPPPV[_`\x01`\x01`\xA0\x1B\x03\x83\x16a\x0CmWP`\x01`\x01`\xA0\x1B\x03\x81\x161a\x06\\V[`@Qcp\xA0\x821`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x04\x83\x01R\x84\x16\x90cp\xA0\x821\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xB1W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xD5\x91\x90a\x13\x1EV[\x90Pa\x06\\V[_\x80`\x01`\x01`\xA0\x1B\x03\x84\x16_R`\x01`\x01`\xA0\x1B\x03\x83\x16` R`@_ \x90P\x84`\x01`\x01`\xA0\x1B\x03\x16c\xF15\xBA\xAA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r+\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\rFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\rj\x91\x90a\x13\x1EV[\x95\x94PPPPPV[_\x80a\r~\x84a\r\xC3V[\x90P_a\r\x8C`\x06\x83a\x15\x9BV[`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x82\x90R\x90\x91P``\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x92\x91PPV[`@Q_\x90a\r\xE2\x90\x83\x90`\x06\x90` \x01\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0E5Wa\x0E5a\r\xFFV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0EcWa\x0Eca\r\xFFV[`@R\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0E\x7FW_\x80\xFD[PV[\x805`\x02\x81\x90\x0B\x81\x14a\x0E\x93W_\x80\xFD[\x91\x90PV[_`\xA0\x82\x84\x03\x12\x15a\x0E\xA8W_\x80\xFD[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0E\xCAWa\x0E\xCAa\r\xFFV[`@R\x90P\x80\x825a\x0E\xDB\x81a\x0EkV[\x81R` \x83\x015a\x0E\xEB\x81a\x0EkV[` \x82\x01R`@\x83\x015b\xFF\xFF\xFF\x81\x16\x81\x14a\x0F\x05W_\x80\xFD[`@\x82\x01Ra\x0F\x16``\x84\x01a\x0E\x82V[``\x82\x01R`\x80\x83\x015a\x0F)\x81a\x0EkV[`\x80\x91\x90\x91\x01R\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\x0FFW_\x80\xFD[`@Q`\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0FhWa\x0Fha\r\xFFV[`@R\x90P\x80a\x0Fw\x83a\x0E\x82V[\x81Ra\x0F\x85` \x84\x01a\x0E\x82V[` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0F\xBDWa\x0F\xBDa\r\xFFV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[_\x82`\x1F\x83\x01\x12a\x0F\xDAW_\x80\xFD[\x815a\x0F\xEDa\x0F\xE8\x82a\x0F\xA5V[a\x0E;V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x10\x01W_\x80\xFD[\x81` \x85\x01` \x83\x017_\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x80\x15\x15\x81\x14a\x0E\x7FW_\x80\xFD[\x805a\x0E\x93\x81a\x10\x1DV[_\x80_\x80_a\x01\x80\x86\x88\x03\x12\x15a\x10JW_\x80\xFD[a\x10T\x87\x87a\x0E\x98V[\x94Pa\x10c\x87`\xA0\x88\x01a\x0F6V[\x93Pa\x01 \x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10~W_\x80\xFD[a\x10\x8A\x88\x82\x89\x01a\x0F\xCBV[\x93PPa\x01@\x86\x015a\x10\x9C\x81a\x10\x1DV[\x91Pa\x01`\x86\x015a\x10\xAD\x81a\x10\x1DV[\x80\x91PP\x92\x95P\x92\x95\x90\x93PV[_\x80_a\x01@\x84\x86\x03\x12\x15a\x10\xCEW_\x80\xFD[a\x10\xD8\x85\x85a\x0E\x98V[\x92Pa\x10\xE7\x85`\xA0\x86\x01a\x0F6V[\x91Pa\x01 \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\x02W_\x80\xFD[a\x11\x0E\x86\x82\x87\x01a\x0F\xCBV[\x91PP\x92P\x92P\x92V[_\x80` \x83\x85\x03\x12\x15a\x11)W_\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11>W_\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x11NW_\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11cW_\x80\xFD[\x85` \x82\x84\x01\x01\x11\x15a\x11tW_\x80\xFD[` \x91\x90\x91\x01\x95\x90\x94P\x92PPPV[_\x81Q\x80\x84R\x80` \x84\x01` \x86\x01^_` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R_a\x11\xC4` \x83\x01\x84a\x11\x84V[\x93\x92PPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x83R` \x80\x83\x01Q\x82\x16\x90\x84\x01R`@\x80\x83\x01Qb\xFF\xFF\xFF\x16\x90\x84\x01R``\x80\x83\x01Q`\x02\x0B\x90\x84\x01R`\x80\x91\x82\x01Q\x16\x91\x01RV[` \x80\x82R\x82Q`\x01`\x01`\xA0\x1B\x03\x16\x82\x82\x01R\x82\x01Q_\x90a\x124`@\x84\x01\x82a\x11\xCBV[P`@\x83\x81\x01Q\x80Q`\x02\x90\x81\x0B`\xE0\x86\x01R` \x82\x01Q\x90\x0Ba\x01\0\x85\x01R\x90\x81\x01Qa\x01 \x84\x01R``\x90\x81\x01Qa\x01@\x84\x01R\x83\x01Qa\x01\xA0a\x01`\x84\x01Ra\x12\x84a\x01\xC0\x84\x01\x82a\x11\x84V[\x90P`\x80\x84\x01Q\x15\x15a\x01\x80\x84\x01R`\xA0\x84\x01Q\x15\x15a\x01\xA0\x84\x01R\x80\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x12\xBAW_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12\xCFW_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x12\xDFW_\x80\xFD[\x80Qa\x12\xEDa\x0F\xE8\x82a\x0F\xA5V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x13\x01W_\x80\xFD[\x81` \x84\x01` \x83\x01^_\x91\x81\x01` \x01\x91\x90\x91R\x94\x93PPPPV[_` \x82\x84\x03\x12\x15a\x13.W_\x80\xFD[PQ\x91\x90PV[_` \x82\x84\x03\x12\x15a\x13EW_\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13ZW_\x80\xFD[\x82\x01a\x01\xA0\x81\x85\x03\x12\x15a\x13lW_\x80\xFD[a\x13ta\x0E\x13V[\x815a\x13\x7F\x81a\x0EkV[\x81Ra\x13\x8E\x85` \x84\x01a\x0E\x98V[` \x82\x01Ra\x13\xA0\x85`\xC0\x84\x01a\x0F6V[`@\x82\x01Ra\x01@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\xBEW_\x80\xFD[a\x13\xCA\x86\x82\x85\x01a\x0F\xCBV[``\x83\x01RPa\x13\xDDa\x01`\x83\x01a\x10*V[`\x80\x82\x01Ra\x13\xEFa\x01\x80\x83\x01a\x10*V[`\xA0\x82\x01R\x94\x93PPPPV[a\x14\x06\x81\x85a\x11\xCBV[\x82Q`\x02\x90\x81\x0B`\xA0\x83\x01R` \x84\x01Q\x90\x0B`\xC0\x82\x01R`@\x83\x01Q`\xE0\x82\x01R``\x83\x01Qa\x01\0\x82\x01Ra\x01@a\x01 \x82\x01R_a\rja\x01@\x83\x01\x84a\x11\x84V[_\x80`@\x83\x85\x03\x12\x15a\x14\\W_\x80\xFD[PP\x80Q` \x90\x91\x01Q\x90\x92\x90\x91PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x82\x81\x12_\x83\x12\x80\x15\x82\x16\x82\x15\x82\x16\x17\x15a\x14\xA0Wa\x14\xA0a\x14mV[PP\x92\x91PPV[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[_`\x01`\xFF\x1B\x82\x01a\x14\xD0Wa\x14\xD0a\x14mV[P_\x03\x90V[_` \x82\x84\x03\x12\x15a\x14\xE6W_\x80\xFD[\x81Qa\x11\xC4\x81a\x10\x1DV[_` \x82\x84\x03\x12\x15a\x15\x01W_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15\x16W_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x15&W_\x80\xFD[\x80Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15?Wa\x15?a\r\xFFV[\x80`\x05\x1Ba\x15O` \x82\x01a\x0E;V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x87\x84\x11\x15a\x15jW_\x80\xFD[` \x85\x01\x94P[\x83\x85\x10\x15a\x15\x90W\x84Q\x80\x83R` \x95\x86\x01\x95\x90\x93P\x90\x91\x01\x90a\x15qV[\x97\x96PPPPPPPV[\x80\x82\x01\x80\x82\x11\x15a\x06\\Wa\x06\\a\x14mV\xFE\xA2dipfsX\"\x12 \xD0(\n\xE4\xDF\xAA\x07\xBD\xB4\xEAr?q\xCBJ<\x8A#\xC4L\xDE\xE6K6\x81J\xDAT\x91\"y\xEEdsolcC\0\x08\x1A\x003", + b"`\xA0`@R4\x80\x15`\x0EW_\x80\xFD[P`@Qa\x17p8\x03\x80a\x17p\x839\x81\x01`@\x81\x90R`+\x91`;V[`\x01`\x01`\xA0\x1B\x03\x16`\x80R`fV[_` \x82\x84\x03\x12\x15`JW_\x80\xFD[\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14`_W_\x80\xFD[\x93\x92PPPV[`\x80Qa\x16\xA7a\0\xC9_9_\x81\x81`y\x01R\x81\x81`\xF5\x01R\x81\x81a\x02-\x01R\x81\x81a\x02\xC7\x01R\x81\x81a\x02\xF8\x01R\x81\x81a\x03\xC3\x01R\x81\x81a\x05\xD1\x01R\x81\x81a\x06'\x01R\x81\x81a\x06\x96\x01R\x81\x81a\x06\xE7\x01R\x81\x81a\x08Q\x01Ra\x08\x84\x01Ra\x16\xA7_\xF3\xFE`\x80`@R`\x046\x10a\0>W_5`\xE0\x1C\x80c\n[\x11\xE4\x14a\0BW\x80cH\x1Cju\x14a\0hW\x80cZk\xCF\xDA\x14a\0\xB3W\x80c\x91\xDDsF\x14a\0\xC6W[_\x80\xFD[a\0Ua\0P6`\x04a\x11\x0CV[a\0\xF2V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0sW_\x80\xFD[Pa\0\x9B\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0_V[a\0Ua\0\xC16`\x04a\x11\x92V[a\x02\nV[4\x80\x15a\0\xD1W_\x80\xFD[Pa\0\xE5a\0\xE06`\x04a\x11\xEFV[a\x02 V[`@Qa\0_\x91\x90a\x12\x89V[_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cH\xC8\x94\x91`@Q\x80`\xC0\x01`@R\x803`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x15\x15\x81R` \x01\x85\x15\x15\x81RP`@Q` \x01a\x01l\x91\x90a\x12\xE5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x01\x97\x91\x90a\x12\x89V[_`@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x01\xB2W=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x01\xD9\x91\x90\x81\x01\x90a\x13\x81V[\x80` \x01\x90Q\x81\x01\x90a\x01\xEC\x91\x90a\x13\xF5V[\x90PG\x80\x15a\x02\0Wa\x02\0_3\x83a\x079V[P\x95\x94PPPPPV[_a\x02\x18\x84\x84\x84_\x80a\0\xF2V[\x94\x93PPPPV[``3`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x02\x89W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rf\x06W'&\xF7\"\x03`\xCC\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[_a\x02\x96\x83\x85\x01\x85a\x14\x0CV[\x90P_a\x02\xF1a\x02\xAB\x83` \x01Q`\xA0\x90 \x90V[`@\x84\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x07\xD3V[PP\x90P_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cZk\xCF\xDA\x84` \x01Q\x85`@\x01Q\x86``\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x03R\x93\x92\x91\x90a\x14\xD3V[`@\x80Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x03mW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x91\x91\x90a\x15\"V[P\x90P_a\x03\xEDa\x03\xA7\x85` \x01Q`\xA0\x90 \x90V[`@\x86\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x07\xD3V[PP\x90P_a\x04\x07\x85` \x01Q_\x01Q\x86_\x01Q0a\x08*V[\x92PPP_a\x04\"\x86` \x01Q` \x01Q\x87_\x01Q0a\x08*V[\x92PPP\x82`\x0F\x0B\x86`@\x01Q`@\x01Q\x86`\x0F\x0Ba\x04A\x91\x90a\x15XV[\x14a\x04\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7Fliquidity change incorrect\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02\x80V[_\x86`@\x01Q`@\x01Q\x12\x15a\x05*W_\x82\x13\x80a\x04\xABWP_\x81\x13[a\x04\xE1W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rferror 1`\xC8\x1B`D\x82\x01R`d\x01a\x02\x80V[_\x82\x12\x80a\x04\xEEWP_\x81\x12[\x15a\x05%W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rf2\xB997\xB9\x10\x19`\xC9\x1B`D\x82\x01R`d\x01a\x02\x80V[a\x05\xC1V[_\x86`@\x01Q`@\x01Q\x13\x15a\x05\xC1W_\x82\x12\x80a\x05GWP_\x81\x12[a\x05}W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rferror 3`\xC8\x1B`D\x82\x01R`d\x01a\x02\x80V[_\x82\x13\x80a\x05\x8AWP_\x81\x13[\x15a\x05\xC1W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rf\x19\\\x9C\x9B\xDC\x88\r`\xCA\x1B`D\x82\x01R`d\x01a\x02\x80V[_\x82\x12\x15a\x06\x17W\x85Qa\x06\x17\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05\xFA\x85a\x15\x7FV[`\x80\x8A\x01Q` \x8B\x01QQ`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x08\xB6V[_\x81\x12\x15a\x06oW\x85Qa\x06o\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x06P\x84a\x15\x7FV[`\x80\x8A\x01Q` \x80\x8C\x01Q\x01Q`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x08\xB6V[_\x82\x13\x15a\x06\xBEW\x85Q`\xA0\x87\x01Q` \x88\x01QQa\x06\xBE\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x86\x90a\x0B\x82V[_\x81\x13\x15a\x07\x0FW\x85Q`\xA0\x87\x01Q` \x80\x89\x01Q\x01Qa\x07\x0F\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x85\x90a\x0B\x82V[`@\x80Q` \x81\x01\x86\x90R\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96PPPPPPP[\x92\x91PPV[_`\x01`\x01`\xA0\x1B\x03\x84\x16a\x07lW_\x80_\x80\x85\x87Z\xF1\x90P\x80a\x07gWa\x07gcV\xCD\xD0%`\xE1\x1Ba\x0CTV[a\x07\xCDV[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91P_\x81R_` \x82\x01R_`@\x82\x01RP\x80a\x07\xCDWa\x07\xCDc'E\xA1O`\xE2\x1Ba\x0CTV[PPPPV[`@\x80Q`&\x81\x01\x83\x90R`\x06\x81\x01\x84\x90R`\x03\x81\x01\x85\x90R\x85\x81R`:`\x0C\x82\x01 _\x92\x82\x01\x83\x90R` \x82\x01\x83\x90R\x90\x82\x90R\x81\x90\x81\x90a\x08\x17\x8A\x8A\x83a\x0C\x81V[\x91\x9C\x90\x9BP\x90\x99P\x97PPPPPPPPV[_\x80\x80a\x08@`\x01`\x01`\xA0\x1B\x03\x87\x16\x86a\r$V[\x92Pa\x08u`\x01`\x01`\xA0\x1B\x03\x87\x16\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\r$V[\x91Pa\x08\xAB`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x85\x88a\r\xB3V[\x90P\x93P\x93P\x93\x90PV[\x80\x15a\tKW\x83`\x01`\x01`\xA0\x1B\x03\x16c\xF5)\x8A\xCA\x84a\x08\xE5\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01[_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\t0W_\x80\xFD[PZ\xF1\x15\x80\x15a\tBW=_\x80>=_\xFD[PPPPa\x0B{V[`\x01`\x01`\xA0\x1B\x03\x85\x16a\t\xC2W\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\t\x97W=_\x80>=_\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xBC\x91\x90a\x13\xF5V[Pa\x0B{V[`@Qc)a\x04e`\xE2\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x85\x16\x90c\xA5\x84\x11\x94\x90`$\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\n\x02W_\x80\xFD[PZ\xF1\x15\x80\x15a\n\x14W=_\x80>=_\xFD[PPPP`\x01`\x01`\xA0\x1B\x03\x83\x160\x14a\n\xA6W`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16`\x04\x83\x01R\x85\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x86\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n|W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xA0\x91\x90a\x15\x99V[Pa\x0B\x18V[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`$\x82\x01\x84\x90R\x86\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n\xF2W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\x16\x91\x90a\x15\x99V[P[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x0BUW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0By\x91\x90a\x13\xF5V[P[PPPPPV[\x80a\x0B\xC4W`@Qc\x0B\r\x9C\t`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x84\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x85\x16\x90c\x0B\r\x9C\t\x90`d\x01a\t\x19V[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x15n)\xF6\x84a\x0B\xED\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\x0C7W_\x80\xFD[PZ\xF1\x15\x80\x15a\x0CIW=_\x80>=_\xFD[PPPPPPPPPV[=`@Q\x82\x81R` `\x04\x82\x01R\x81`$\x82\x01R\x81_`D\x83\x01>` \x80`\x1F\x84\x01\x04\x02`D\x01\x91P\x81\x81\xFD[_\x80_\x80a\x0C\x8F\x86\x86a\x0EJV[`@Qc\x1A\xFE\xB1\x8D`\xE1\x1B\x81R`\x04\x81\x01\x82\x90R`\x03`$\x82\x01R\x90\x91P_\x90`\x01`\x01`\xA0\x1B\x03\x89\x16\x90c5\xFDc\x1A\x90`D\x01_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xDDW=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\r\x04\x91\x90\x81\x01\x90a\x15\xB4V[` \x81\x01Q`@\x82\x01Q``\x90\x92\x01Q\x90\x9A\x91\x99P\x97P\x95PPPPPPV[_`\x01`\x01`\xA0\x1B\x03\x83\x16a\rDWP`\x01`\x01`\xA0\x1B\x03\x81\x161a\x073V[`@Qcp\xA0\x821`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x04\x83\x01R\x84\x16\x90cp\xA0\x821\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\r\x88W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r\xAC\x91\x90a\x13\xF5V[\x90Pa\x073V[_\x80`\x01`\x01`\xA0\x1B\x03\x84\x16_R`\x01`\x01`\xA0\x1B\x03\x83\x16` R`@_ \x90P\x84`\x01`\x01`\xA0\x1B\x03\x16c\xF15\xBA\xAA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x02\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\x1DW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0EA\x91\x90a\x13\xF5V[\x95\x94PPPPPV[_\x80a\x0EU\x84a\x0E\x9AV[\x90P_a\x0Ec`\x06\x83a\x16^V[`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x82\x90R\x90\x91P``\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x92\x91PPV[`@Q_\x90a\x0E\xB9\x90\x83\x90`\x06\x90` \x01\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0F\x0CWa\x0F\x0Ca\x0E\xD6V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0F:Wa\x0F:a\x0E\xD6V[`@R\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0FVW_\x80\xFD[PV[\x805`\x02\x81\x90\x0B\x81\x14a\x0FjW_\x80\xFD[\x91\x90PV[_`\xA0\x82\x84\x03\x12\x15a\x0F\x7FW_\x80\xFD[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0F\xA1Wa\x0F\xA1a\x0E\xD6V[`@R\x90P\x80\x825a\x0F\xB2\x81a\x0FBV[\x81R` \x83\x015a\x0F\xC2\x81a\x0FBV[` \x82\x01R`@\x83\x015b\xFF\xFF\xFF\x81\x16\x81\x14a\x0F\xDCW_\x80\xFD[`@\x82\x01Ra\x0F\xED``\x84\x01a\x0FYV[``\x82\x01R`\x80\x83\x015a\x10\0\x81a\x0FBV[`\x80\x91\x90\x91\x01R\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\x10\x1DW_\x80\xFD[`@Q`\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x10?Wa\x10?a\x0E\xD6V[`@R\x90P\x80a\x10N\x83a\x0FYV[\x81Ra\x10\\` \x84\x01a\x0FYV[` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`\x01`\x01`@\x1B\x03\x82\x11\x15a\x10\x94Wa\x10\x94a\x0E\xD6V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[_\x82`\x1F\x83\x01\x12a\x10\xB1W_\x80\xFD[\x815a\x10\xC4a\x10\xBF\x82a\x10|V[a\x0F\x12V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x10\xD8W_\x80\xFD[\x81` \x85\x01` \x83\x017_\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x80\x15\x15\x81\x14a\x0FVW_\x80\xFD[\x805a\x0Fj\x81a\x10\xF4V[_\x80_\x80_a\x01\x80\x86\x88\x03\x12\x15a\x11!W_\x80\xFD[a\x11+\x87\x87a\x0FoV[\x94Pa\x11:\x87`\xA0\x88\x01a\x10\rV[\x93Pa\x01 \x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11UW_\x80\xFD[a\x11a\x88\x82\x89\x01a\x10\xA2V[\x93PPa\x01@\x86\x015a\x11s\x81a\x10\xF4V[\x91Pa\x01`\x86\x015a\x11\x84\x81a\x10\xF4V[\x80\x91PP\x92\x95P\x92\x95\x90\x93PV[_\x80_a\x01@\x84\x86\x03\x12\x15a\x11\xA5W_\x80\xFD[a\x11\xAF\x85\x85a\x0FoV[\x92Pa\x11\xBE\x85`\xA0\x86\x01a\x10\rV[\x91Pa\x01 \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\xD9W_\x80\xFD[a\x11\xE5\x86\x82\x87\x01a\x10\xA2V[\x91PP\x92P\x92P\x92V[_\x80` \x83\x85\x03\x12\x15a\x12\0W_\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12\x15W_\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x12%W_\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12:W_\x80\xFD[\x85` \x82\x84\x01\x01\x11\x15a\x12KW_\x80\xFD[` \x91\x90\x91\x01\x95\x90\x94P\x92PPPV[_\x81Q\x80\x84R\x80` \x84\x01` \x86\x01^_` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R_a\x12\x9B` \x83\x01\x84a\x12[V[\x93\x92PPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x83R` \x80\x83\x01Q\x82\x16\x90\x84\x01R`@\x80\x83\x01Qb\xFF\xFF\xFF\x16\x90\x84\x01R``\x80\x83\x01Q`\x02\x0B\x90\x84\x01R`\x80\x91\x82\x01Q\x16\x91\x01RV[` \x80\x82R\x82Q`\x01`\x01`\xA0\x1B\x03\x16\x82\x82\x01R\x82\x01Q_\x90a\x13\x0B`@\x84\x01\x82a\x12\xA2V[P`@\x83\x81\x01Q\x80Q`\x02\x90\x81\x0B`\xE0\x86\x01R` \x82\x01Q\x90\x0Ba\x01\0\x85\x01R\x90\x81\x01Qa\x01 \x84\x01R``\x90\x81\x01Qa\x01@\x84\x01R\x83\x01Qa\x01\xA0a\x01`\x84\x01Ra\x13[a\x01\xC0\x84\x01\x82a\x12[V[\x90P`\x80\x84\x01Q\x15\x15a\x01\x80\x84\x01R`\xA0\x84\x01Q\x15\x15a\x01\xA0\x84\x01R\x80\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x13\x91W_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\xA6W_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x13\xB6W_\x80\xFD[\x80Qa\x13\xC4a\x10\xBF\x82a\x10|V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x13\xD8W_\x80\xFD[\x81` \x84\x01` \x83\x01^_\x91\x81\x01` \x01\x91\x90\x91R\x94\x93PPPPV[_` \x82\x84\x03\x12\x15a\x14\x05W_\x80\xFD[PQ\x91\x90PV[_` \x82\x84\x03\x12\x15a\x14\x1CW_\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x141W_\x80\xFD[\x82\x01a\x01\xA0\x81\x85\x03\x12\x15a\x14CW_\x80\xFD[a\x14Ka\x0E\xEAV[\x815a\x14V\x81a\x0FBV[\x81Ra\x14e\x85` \x84\x01a\x0FoV[` \x82\x01Ra\x14w\x85`\xC0\x84\x01a\x10\rV[`@\x82\x01Ra\x01@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x14\x95W_\x80\xFD[a\x14\xA1\x86\x82\x85\x01a\x10\xA2V[``\x83\x01RPa\x14\xB4a\x01`\x83\x01a\x11\x01V[`\x80\x82\x01Ra\x14\xC6a\x01\x80\x83\x01a\x11\x01V[`\xA0\x82\x01R\x94\x93PPPPV[a\x14\xDD\x81\x85a\x12\xA2V[\x82Q`\x02\x90\x81\x0B`\xA0\x83\x01R` \x84\x01Q\x90\x0B`\xC0\x82\x01R`@\x83\x01Q`\xE0\x82\x01R``\x83\x01Qa\x01\0\x82\x01Ra\x01@a\x01 \x82\x01R_a\x0EAa\x01@\x83\x01\x84a\x12[V[_\x80`@\x83\x85\x03\x12\x15a\x153W_\x80\xFD[PP\x80Q` \x90\x91\x01Q\x90\x92\x90\x91PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x82\x81\x12_\x83\x12\x80\x15\x82\x16\x82\x15\x82\x16\x17\x15a\x15wWa\x15wa\x15DV[PP\x92\x91PPV[_`\x01`\xFF\x1B\x82\x01a\x15\x93Wa\x15\x93a\x15DV[P_\x03\x90V[_` \x82\x84\x03\x12\x15a\x15\xA9W_\x80\xFD[\x81Qa\x12\x9B\x81a\x10\xF4V[_` \x82\x84\x03\x12\x15a\x15\xC4W_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15\xD9W_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x15\xE9W_\x80\xFD[\x80Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x16\x02Wa\x16\x02a\x0E\xD6V[\x80`\x05\x1Ba\x16\x12` \x82\x01a\x0F\x12V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x87\x84\x11\x15a\x16-W_\x80\xFD[` \x85\x01\x94P[\x83\x85\x10\x15a\x16SW\x84Q\x80\x83R` \x95\x86\x01\x95\x90\x93P\x90\x91\x01\x90a\x164V[\x97\x96PPPPPPPV[\x80\x82\x01\x80\x82\x11\x15a\x073Wa\x073a\x15DV\xFE\xA2dipfsX\"\x12 \xA6Ri\x0Ey>\x1Dw \xA89\xF0T\xE2m\xCE\x04\xDB\x15\x86-\xA23\0n\xF3\xA3\xDE3\xB8\xC1:dsolcC\0\x08\x1A\x003", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b610055610050366004611035565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c13660046110bb565b61020a565b3480156100d1575f80fd5b506100e56100e0366004611118565b610220565b60405161005f91906111b2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c919061120e565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161019791906111b2565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d991908101906112aa565b8060200190518101906101ec919061131e565b9050478015610200576102005f3383610662565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610256575f80fd5b5f61026383850185611335565b90505f6102be610278836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b815260040161031f939291906113fc565b60408051808303815f875af115801561033a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035e919061144b565b5090505f6103ba610374856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f6103d485602001515f0151865f015130610753565b925050505f6103ef866020015160200151875f015130610753565b9250505082600f0b86604001516040015186600f0b61040e9190611481565b1461045f5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f7272656374000000000000604482015260640160405180910390fd5b5f86604001516040015112156104a7575f82138061047c57505f81135b610488576104886114a8565b5f82128061049557505f81125b156104a2576104a26114a8565b6104ea565b5f86604001516040015113156104ea575f8212806104c457505f81125b6104d0576104d06114a8565b5f8213806104dd57505f81135b156104ea576104ea6114a8565b5f821215610540578551610540907f000000000000000000000000000000000000000000000000000000000000000090610523856114bc565b60808a015160208b0151516001600160a01b0316939291906107df565b5f811215610598578551610598907f000000000000000000000000000000000000000000000000000000000000000090610579846114bc565b60808a01516020808c015101516001600160a01b0316939291906107df565b5f8213156105e757855160a08701516020880151516105e7926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610aab565b5f81131561063857855160a08701516020808901510151610638926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610aab565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610695575f805f8085875af1905080610690576106906356cdd02560e11b610b7d565b6106f6565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806106f6576106f6632745a14f60e21b610b7d565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906107408a8a83610baa565b919c909b50909950975050505050505050565b5f80806107696001600160a01b03871686610c4d565b925061079e6001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610c4d565b91506107d46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610cdc565b905093509350939050565b801561087457836001600160a01b031663f5298aca8461080e886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610859575f80fd5b505af115801561086b573d5f803e3d5ffd5b50505050610aa4565b6001600160a01b0385166108eb57836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af11580156108c0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e5919061131e565b50610aa4565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b15801561092b575f80fd5b505af115801561093d573d5f803e3d5ffd5b505050506001600160a01b03831630146109cf576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af11580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906114d6565b50610a41565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f91906114d6565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610a7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa2919061131e565b505b5050505050565b80610aed57604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610842565b836001600160a01b031663156e29f684610b16886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610b60575f80fd5b505af1158015610b72573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610bb88686610d73565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610c06573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c2d91908101906114f1565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610c6d57506001600160a01b0381163161065c565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd5919061131e565b905061065c565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610d2b91815260200190565b602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a919061131e565b95945050505050565b5f80610d7e84610dc3565b90505f610d8c60068361159b565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610de2908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610e3557610e35610dff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610e6357610e63610dff565b604052919050565b6001600160a01b0381168114610e7f575f80fd5b50565b8035600281900b8114610e93575f80fd5b919050565b5f60a08284031215610ea8575f80fd5b60405160a081016001600160401b0381118282101715610eca57610eca610dff565b6040529050808235610edb81610e6b565b81526020830135610eeb81610e6b565b6020820152604083013562ffffff81168114610f05575f80fd5b6040820152610f1660608401610e82565b60608201526080830135610f2981610e6b565b6080919091015292915050565b5f60808284031215610f46575f80fd5b604051608081016001600160401b0381118282101715610f6857610f68610dff565b604052905080610f7783610e82565b8152610f8560208401610e82565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b03821115610fbd57610fbd610dff565b50601f01601f191660200190565b5f82601f830112610fda575f80fd5b8135610fed610fe882610fa5565b610e3b565b818152846020838601011115611001575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610e7f575f80fd5b8035610e938161101d565b5f805f805f610180868803121561104a575f80fd5b6110548787610e98565b94506110638760a08801610f36565b93506101208601356001600160401b0381111561107e575f80fd5b61108a88828901610fcb565b93505061014086013561109c8161101d565b91506101608601356110ad8161101d565b809150509295509295909350565b5f805f61014084860312156110ce575f80fd5b6110d88585610e98565b92506110e78560a08601610f36565b91506101208401356001600160401b03811115611102575f80fd5b61110e86828701610fcb565b9150509250925092565b5f8060208385031215611129575f80fd5b82356001600160401b0381111561113e575f80fd5b8301601f8101851361114e575f80fd5b80356001600160401b03811115611163575f80fd5b856020828401011115611174575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111c46020830184611184565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061123460408401826111cb565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a06101608401526112846101c0840182611184565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f602082840312156112ba575f80fd5b81516001600160401b038111156112cf575f80fd5b8201601f810184136112df575f80fd5b80516112ed610fe882610fa5565b818152856020838501011115611301575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f6020828403121561132e575f80fd5b5051919050565b5f60208284031215611345575f80fd5b81356001600160401b0381111561135a575f80fd5b82016101a0818503121561136c575f80fd5b611374610e13565b813561137f81610e6b565b815261138e8560208401610e98565b60208201526113a08560c08401610f36565b60408201526101408201356001600160401b038111156113be575f80fd5b6113ca86828501610fcb565b6060830152506113dd610160830161102a565b60808201526113ef610180830161102a565b60a0820152949350505050565b61140681856111cb565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610d6a610140830184611184565b5f806040838503121561145c575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f8312801582168215821617156114a0576114a061146d565b505092915050565b634e487b7160e01b5f52600160045260245ffd5b5f600160ff1b82016114d0576114d061146d565b505f0390565b5f602082840312156114e6575f80fd5b81516111c48161101d565b5f60208284031215611501575f80fd5b81516001600160401b03811115611516575f80fd5b8201601f81018413611526575f80fd5b80516001600160401b0381111561153f5761153f610dff565b8060051b61154f60208201610e3b565b9182526020818401810192908101908784111561156a575f80fd5b6020850194505b8385101561159057845180835260209586019590935090910190611571565b979650505050505050565b8082018082111561065c5761065c61146d56fea2646970667358221220d0280ae4dfaa07bdb4ea723f71cb4a3c8a23c44cdee64b36814ada54912279ee64736f6c634300081a0033 + ///0x60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b61005561005036600461110c565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c1366004611192565b61020a565b3480156100d1575f80fd5b506100e56100e03660046111ef565b610220565b60405161005f9190611289565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c91906112e5565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016101979190611289565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d99190810190611381565b8060200190518101906101ec91906113f5565b9050478015610200576102005f3383610739565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102895760405162461bcd60e51b815260206004820152600760248201526606572726f7220360cc1b60448201526064015b60405180910390fd5b5f6102968385018561140c565b90505f6102f16102ab836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916107d3565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b8152600401610352939291906114d3565b60408051808303815f875af115801561036d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103919190611522565b5090505f6103ed6103a7856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916107d3565b505090505f61040785602001515f0151865f01513061082a565b925050505f610422866020015160200151875f01513061082a565b9250505082600f0b86604001516040015186600f0b6104419190611558565b1461048e5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f72726563740000000000006044820152606401610280565b5f866040015160400151121561052a575f8213806104ab57505f81135b6104e15760405162461bcd60e51b81526020600482015260076024820152666572726f72203160c81b6044820152606401610280565b5f8212806104ee57505f81125b156105255760405162461bcd60e51b815260206004820152600760248201526632b93937b9101960c91b6044820152606401610280565b6105c1565b5f86604001516040015113156105c1575f82128061054757505f81125b61057d5760405162461bcd60e51b81526020600482015260076024820152666572726f72203360c81b6044820152606401610280565b5f82138061058a57505f81135b156105c15760405162461bcd60e51b8152602060048201526007602482015266195c9c9bdc880d60ca1b6044820152606401610280565b5f821215610617578551610617907f0000000000000000000000000000000000000000000000000000000000000000906105fa8561157f565b60808a015160208b0151516001600160a01b0316939291906108b6565b5f81121561066f57855161066f907f0000000000000000000000000000000000000000000000000000000000000000906106508461157f565b60808a01516020808c015101516001600160a01b0316939291906108b6565b5f8213156106be57855160a08701516020880151516106be926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610b82565b5f81131561070f57855160a0870151602080890151015161070f926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610b82565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b03841661076c575f805f8085875af1905080610767576107676356cdd02560e11b610c54565b6107cd565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806107cd576107cd632745a14f60e21b610c54565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906108178a8a83610c81565b919c909b50909950975050505050505050565b5f80806108406001600160a01b03871686610d24565b92506108756001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610d24565b91506108ab6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610db3565b905093509350939050565b801561094b57836001600160a01b031663f5298aca846108e5886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610930575f80fd5b505af1158015610942573d5f803e3d5ffd5b50505050610b7b565b6001600160a01b0385166109c257836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015610997573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906109bc91906113f5565b50610b7b565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015610a02575f80fd5b505af1158015610a14573d5f803e3d5ffd5b505050506001600160a01b0383163014610aa6576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af1158015610a7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa09190611599565b50610b18565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610af2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b169190611599565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610b55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7991906113f5565b505b5050505050565b80610bc457604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610919565b836001600160a01b031663156e29f684610bed886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610c37575f80fd5b505af1158015610c49573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610c8f8686610e4a565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610cdd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d0491908101906115b4565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610d4457506001600160a01b03811631610733565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610d88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dac91906113f5565b9050610733565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610e0291815260200190565b602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4191906113f5565b95945050505050565b5f80610e5584610e9a565b90505f610e6360068361165e565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610eb9908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610f0c57610f0c610ed6565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f3a57610f3a610ed6565b604052919050565b6001600160a01b0381168114610f56575f80fd5b50565b8035600281900b8114610f6a575f80fd5b919050565b5f60a08284031215610f7f575f80fd5b60405160a081016001600160401b0381118282101715610fa157610fa1610ed6565b6040529050808235610fb281610f42565b81526020830135610fc281610f42565b6020820152604083013562ffffff81168114610fdc575f80fd5b6040820152610fed60608401610f59565b6060820152608083013561100081610f42565b6080919091015292915050565b5f6080828403121561101d575f80fd5b604051608081016001600160401b038111828210171561103f5761103f610ed6565b60405290508061104e83610f59565b815261105c60208401610f59565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b0382111561109457611094610ed6565b50601f01601f191660200190565b5f82601f8301126110b1575f80fd5b81356110c46110bf8261107c565b610f12565b8181528460208386010111156110d8575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610f56575f80fd5b8035610f6a816110f4565b5f805f805f6101808688031215611121575f80fd5b61112b8787610f6f565b945061113a8760a0880161100d565b93506101208601356001600160401b03811115611155575f80fd5b611161888289016110a2565b935050610140860135611173816110f4565b9150610160860135611184816110f4565b809150509295509295909350565b5f805f61014084860312156111a5575f80fd5b6111af8585610f6f565b92506111be8560a0860161100d565b91506101208401356001600160401b038111156111d9575f80fd5b6111e5868287016110a2565b9150509250925092565b5f8060208385031215611200575f80fd5b82356001600160401b03811115611215575f80fd5b8301601f81018513611225575f80fd5b80356001600160401b0381111561123a575f80fd5b85602082840101111561124b575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61129b602083018461125b565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061130b60408401826112a2565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a061016084015261135b6101c084018261125b565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f60208284031215611391575f80fd5b81516001600160401b038111156113a6575f80fd5b8201601f810184136113b6575f80fd5b80516113c46110bf8261107c565b8181528560208385010111156113d8575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215611405575f80fd5b5051919050565b5f6020828403121561141c575f80fd5b81356001600160401b03811115611431575f80fd5b82016101a08185031215611443575f80fd5b61144b610eea565b813561145681610f42565b81526114658560208401610f6f565b60208201526114778560c0840161100d565b60408201526101408201356001600160401b03811115611495575f80fd5b6114a1868285016110a2565b6060830152506114b46101608301611101565b60808201526114c66101808301611101565b60a0820152949350505050565b6114dd81856112a2565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610e4161014083018461125b565b5f8060408385031215611533575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f83128015821682158216171561157757611577611544565b505092915050565b5f600160ff1b820161159357611593611544565b505f0390565b5f602082840312156115a9575f80fd5b815161129b816110f4565b5f602082840312156115c4575f80fd5b81516001600160401b038111156115d9575f80fd5b8201601f810184136115e9575f80fd5b80516001600160401b0381111561160257611602610ed6565b8060051b61161260208201610f12565b9182526020818401810192908101908784111561162d575f80fd5b6020850194505b8385101561165357845180835260209586019590935090910190611634565b979650505050505050565b808201808211156107335761073361154456fea2646970667358221220a652690e793e1d7720a839f054e26dce04db15862da233006ef3a3de33b8c13a64736f6c634300081a0033 /// ``` #[rustfmt::skip] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10a\0>W_5`\xE0\x1C\x80c\n[\x11\xE4\x14a\0BW\x80cH\x1Cju\x14a\0hW\x80cZk\xCF\xDA\x14a\0\xB3W\x80c\x91\xDDsF\x14a\0\xC6W[_\x80\xFD[a\0Ua\0P6`\x04a\x105V[a\0\xF2V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0sW_\x80\xFD[Pa\0\x9B\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0_V[a\0Ua\0\xC16`\x04a\x10\xBBV[a\x02\nV[4\x80\x15a\0\xD1W_\x80\xFD[Pa\0\xE5a\0\xE06`\x04a\x11\x18V[a\x02 V[`@Qa\0_\x91\x90a\x11\xB2V[_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cH\xC8\x94\x91`@Q\x80`\xC0\x01`@R\x803`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x15\x15\x81R` \x01\x85\x15\x15\x81RP`@Q` \x01a\x01l\x91\x90a\x12\x0EV[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x01\x97\x91\x90a\x11\xB2V[_`@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x01\xB2W=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x01\xD9\x91\x90\x81\x01\x90a\x12\xAAV[\x80` \x01\x90Q\x81\x01\x90a\x01\xEC\x91\x90a\x13\x1EV[\x90PG\x80\x15a\x02\0Wa\x02\0_3\x83a\x06bV[P\x95\x94PPPPPV[_a\x02\x18\x84\x84\x84_\x80a\0\xF2V[\x94\x93PPPPV[``3`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x02VW_\x80\xFD[_a\x02c\x83\x85\x01\x85a\x135V[\x90P_a\x02\xBEa\x02x\x83` \x01Q`\xA0\x90 \x90V[`@\x84\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x06\xFCV[PP\x90P_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cZk\xCF\xDA\x84` \x01Q\x85`@\x01Q\x86``\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x03\x1F\x93\x92\x91\x90a\x13\xFCV[`@\x80Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x03:W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03^\x91\x90a\x14KV[P\x90P_a\x03\xBAa\x03t\x85` \x01Q`\xA0\x90 \x90V[`@\x86\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x06\xFCV[PP\x90P_a\x03\xD4\x85` \x01Q_\x01Q\x86_\x01Q0a\x07SV[\x92PPP_a\x03\xEF\x86` \x01Q` \x01Q\x87_\x01Q0a\x07SV[\x92PPP\x82`\x0F\x0B\x86`@\x01Q`@\x01Q\x86`\x0F\x0Ba\x04\x0E\x91\x90a\x14\x81V[\x14a\x04_W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7Fliquidity change incorrect\0\0\0\0\0\0`D\x82\x01R`d\x01`@Q\x80\x91\x03\x90\xFD[_\x86`@\x01Q`@\x01Q\x12\x15a\x04\xA7W_\x82\x13\x80a\x04|WP_\x81\x13[a\x04\x88Wa\x04\x88a\x14\xA8V[_\x82\x12\x80a\x04\x95WP_\x81\x12[\x15a\x04\xA2Wa\x04\xA2a\x14\xA8V[a\x04\xEAV[_\x86`@\x01Q`@\x01Q\x13\x15a\x04\xEAW_\x82\x12\x80a\x04\xC4WP_\x81\x12[a\x04\xD0Wa\x04\xD0a\x14\xA8V[_\x82\x13\x80a\x04\xDDWP_\x81\x13[\x15a\x04\xEAWa\x04\xEAa\x14\xA8V[_\x82\x12\x15a\x05@W\x85Qa\x05@\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05#\x85a\x14\xBCV[`\x80\x8A\x01Q` \x8B\x01QQ`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x07\xDFV[_\x81\x12\x15a\x05\x98W\x85Qa\x05\x98\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05y\x84a\x14\xBCV[`\x80\x8A\x01Q` \x80\x8C\x01Q\x01Q`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x07\xDFV[_\x82\x13\x15a\x05\xE7W\x85Q`\xA0\x87\x01Q` \x88\x01QQa\x05\xE7\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x86\x90a\n\xABV[_\x81\x13\x15a\x068W\x85Q`\xA0\x87\x01Q` \x80\x89\x01Q\x01Qa\x068\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x85\x90a\n\xABV[`@\x80Q` \x81\x01\x86\x90R\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96PPPPPPP[\x92\x91PPV[_`\x01`\x01`\xA0\x1B\x03\x84\x16a\x06\x95W_\x80_\x80\x85\x87Z\xF1\x90P\x80a\x06\x90Wa\x06\x90cV\xCD\xD0%`\xE1\x1Ba\x0B}V[a\x06\xF6V[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91P_\x81R_` \x82\x01R_`@\x82\x01RP\x80a\x06\xF6Wa\x06\xF6c'E\xA1O`\xE2\x1Ba\x0B}V[PPPPV[`@\x80Q`&\x81\x01\x83\x90R`\x06\x81\x01\x84\x90R`\x03\x81\x01\x85\x90R\x85\x81R`:`\x0C\x82\x01 _\x92\x82\x01\x83\x90R` \x82\x01\x83\x90R\x90\x82\x90R\x81\x90\x81\x90a\x07@\x8A\x8A\x83a\x0B\xAAV[\x91\x9C\x90\x9BP\x90\x99P\x97PPPPPPPPV[_\x80\x80a\x07i`\x01`\x01`\xA0\x1B\x03\x87\x16\x86a\x0CMV[\x92Pa\x07\x9E`\x01`\x01`\xA0\x1B\x03\x87\x16\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x0CMV[\x91Pa\x07\xD4`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x85\x88a\x0C\xDCV[\x90P\x93P\x93P\x93\x90PV[\x80\x15a\x08tW\x83`\x01`\x01`\xA0\x1B\x03\x16c\xF5)\x8A\xCA\x84a\x08\x0E\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01[_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\x08YW_\x80\xFD[PZ\xF1\x15\x80\x15a\x08kW=_\x80>=_\xFD[PPPPa\n\xA4V[`\x01`\x01`\xA0\x1B\x03\x85\x16a\x08\xEBW\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\x08\xC0W=_\x80>=_\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xE5\x91\x90a\x13\x1EV[Pa\n\xA4V[`@Qc)a\x04e`\xE2\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x85\x16\x90c\xA5\x84\x11\x94\x90`$\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\t+W_\x80\xFD[PZ\xF1\x15\x80\x15a\t=W=_\x80>=_\xFD[PPPP`\x01`\x01`\xA0\x1B\x03\x83\x160\x14a\t\xCFW`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16`\x04\x83\x01R\x85\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x86\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\t\xA5W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xC9\x91\x90a\x14\xD6V[Pa\nAV[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`$\x82\x01\x84\x90R\x86\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n\x1BW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n?\x91\x90a\x14\xD6V[P[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n~W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xA2\x91\x90a\x13\x1EV[P[PPPPPV[\x80a\n\xEDW`@Qc\x0B\r\x9C\t`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x84\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x85\x16\x90c\x0B\r\x9C\t\x90`d\x01a\x08BV[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x15n)\xF6\x84a\x0B\x16\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\x0B`W_\x80\xFD[PZ\xF1\x15\x80\x15a\x0BrW=_\x80>=_\xFD[PPPPPPPPPV[=`@Q\x82\x81R` `\x04\x82\x01R\x81`$\x82\x01R\x81_`D\x83\x01>` \x80`\x1F\x84\x01\x04\x02`D\x01\x91P\x81\x81\xFD[_\x80_\x80a\x0B\xB8\x86\x86a\rsV[`@Qc\x1A\xFE\xB1\x8D`\xE1\x1B\x81R`\x04\x81\x01\x82\x90R`\x03`$\x82\x01R\x90\x91P_\x90`\x01`\x01`\xA0\x1B\x03\x89\x16\x90c5\xFDc\x1A\x90`D\x01_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\x06W=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x0C-\x91\x90\x81\x01\x90a\x14\xF1V[` \x81\x01Q`@\x82\x01Q``\x90\x92\x01Q\x90\x9A\x91\x99P\x97P\x95PPPPPPV[_`\x01`\x01`\xA0\x1B\x03\x83\x16a\x0CmWP`\x01`\x01`\xA0\x1B\x03\x81\x161a\x06\\V[`@Qcp\xA0\x821`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x04\x83\x01R\x84\x16\x90cp\xA0\x821\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xB1W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\xD5\x91\x90a\x13\x1EV[\x90Pa\x06\\V[_\x80`\x01`\x01`\xA0\x1B\x03\x84\x16_R`\x01`\x01`\xA0\x1B\x03\x83\x16` R`@_ \x90P\x84`\x01`\x01`\xA0\x1B\x03\x16c\xF15\xBA\xAA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\r+\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\rFW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\rj\x91\x90a\x13\x1EV[\x95\x94PPPPPV[_\x80a\r~\x84a\r\xC3V[\x90P_a\r\x8C`\x06\x83a\x15\x9BV[`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x82\x90R\x90\x91P``\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x92\x91PPV[`@Q_\x90a\r\xE2\x90\x83\x90`\x06\x90` \x01\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0E5Wa\x0E5a\r\xFFV[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0EcWa\x0Eca\r\xFFV[`@R\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0E\x7FW_\x80\xFD[PV[\x805`\x02\x81\x90\x0B\x81\x14a\x0E\x93W_\x80\xFD[\x91\x90PV[_`\xA0\x82\x84\x03\x12\x15a\x0E\xA8W_\x80\xFD[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0E\xCAWa\x0E\xCAa\r\xFFV[`@R\x90P\x80\x825a\x0E\xDB\x81a\x0EkV[\x81R` \x83\x015a\x0E\xEB\x81a\x0EkV[` \x82\x01R`@\x83\x015b\xFF\xFF\xFF\x81\x16\x81\x14a\x0F\x05W_\x80\xFD[`@\x82\x01Ra\x0F\x16``\x84\x01a\x0E\x82V[``\x82\x01R`\x80\x83\x015a\x0F)\x81a\x0EkV[`\x80\x91\x90\x91\x01R\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\x0FFW_\x80\xFD[`@Q`\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0FhWa\x0Fha\r\xFFV[`@R\x90P\x80a\x0Fw\x83a\x0E\x82V[\x81Ra\x0F\x85` \x84\x01a\x0E\x82V[` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`\x01`\x01`@\x1B\x03\x82\x11\x15a\x0F\xBDWa\x0F\xBDa\r\xFFV[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[_\x82`\x1F\x83\x01\x12a\x0F\xDAW_\x80\xFD[\x815a\x0F\xEDa\x0F\xE8\x82a\x0F\xA5V[a\x0E;V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x10\x01W_\x80\xFD[\x81` \x85\x01` \x83\x017_\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x80\x15\x15\x81\x14a\x0E\x7FW_\x80\xFD[\x805a\x0E\x93\x81a\x10\x1DV[_\x80_\x80_a\x01\x80\x86\x88\x03\x12\x15a\x10JW_\x80\xFD[a\x10T\x87\x87a\x0E\x98V[\x94Pa\x10c\x87`\xA0\x88\x01a\x0F6V[\x93Pa\x01 \x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x10~W_\x80\xFD[a\x10\x8A\x88\x82\x89\x01a\x0F\xCBV[\x93PPa\x01@\x86\x015a\x10\x9C\x81a\x10\x1DV[\x91Pa\x01`\x86\x015a\x10\xAD\x81a\x10\x1DV[\x80\x91PP\x92\x95P\x92\x95\x90\x93PV[_\x80_a\x01@\x84\x86\x03\x12\x15a\x10\xCEW_\x80\xFD[a\x10\xD8\x85\x85a\x0E\x98V[\x92Pa\x10\xE7\x85`\xA0\x86\x01a\x0F6V[\x91Pa\x01 \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\x02W_\x80\xFD[a\x11\x0E\x86\x82\x87\x01a\x0F\xCBV[\x91PP\x92P\x92P\x92V[_\x80` \x83\x85\x03\x12\x15a\x11)W_\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11>W_\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x11NW_\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11cW_\x80\xFD[\x85` \x82\x84\x01\x01\x11\x15a\x11tW_\x80\xFD[` \x91\x90\x91\x01\x95\x90\x94P\x92PPPV[_\x81Q\x80\x84R\x80` \x84\x01` \x86\x01^_` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R_a\x11\xC4` \x83\x01\x84a\x11\x84V[\x93\x92PPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x83R` \x80\x83\x01Q\x82\x16\x90\x84\x01R`@\x80\x83\x01Qb\xFF\xFF\xFF\x16\x90\x84\x01R``\x80\x83\x01Q`\x02\x0B\x90\x84\x01R`\x80\x91\x82\x01Q\x16\x91\x01RV[` \x80\x82R\x82Q`\x01`\x01`\xA0\x1B\x03\x16\x82\x82\x01R\x82\x01Q_\x90a\x124`@\x84\x01\x82a\x11\xCBV[P`@\x83\x81\x01Q\x80Q`\x02\x90\x81\x0B`\xE0\x86\x01R` \x82\x01Q\x90\x0Ba\x01\0\x85\x01R\x90\x81\x01Qa\x01 \x84\x01R``\x90\x81\x01Qa\x01@\x84\x01R\x83\x01Qa\x01\xA0a\x01`\x84\x01Ra\x12\x84a\x01\xC0\x84\x01\x82a\x11\x84V[\x90P`\x80\x84\x01Q\x15\x15a\x01\x80\x84\x01R`\xA0\x84\x01Q\x15\x15a\x01\xA0\x84\x01R\x80\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x12\xBAW_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12\xCFW_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x12\xDFW_\x80\xFD[\x80Qa\x12\xEDa\x0F\xE8\x82a\x0F\xA5V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x13\x01W_\x80\xFD[\x81` \x84\x01` \x83\x01^_\x91\x81\x01` \x01\x91\x90\x91R\x94\x93PPPPV[_` \x82\x84\x03\x12\x15a\x13.W_\x80\xFD[PQ\x91\x90PV[_` \x82\x84\x03\x12\x15a\x13EW_\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13ZW_\x80\xFD[\x82\x01a\x01\xA0\x81\x85\x03\x12\x15a\x13lW_\x80\xFD[a\x13ta\x0E\x13V[\x815a\x13\x7F\x81a\x0EkV[\x81Ra\x13\x8E\x85` \x84\x01a\x0E\x98V[` \x82\x01Ra\x13\xA0\x85`\xC0\x84\x01a\x0F6V[`@\x82\x01Ra\x01@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\xBEW_\x80\xFD[a\x13\xCA\x86\x82\x85\x01a\x0F\xCBV[``\x83\x01RPa\x13\xDDa\x01`\x83\x01a\x10*V[`\x80\x82\x01Ra\x13\xEFa\x01\x80\x83\x01a\x10*V[`\xA0\x82\x01R\x94\x93PPPPV[a\x14\x06\x81\x85a\x11\xCBV[\x82Q`\x02\x90\x81\x0B`\xA0\x83\x01R` \x84\x01Q\x90\x0B`\xC0\x82\x01R`@\x83\x01Q`\xE0\x82\x01R``\x83\x01Qa\x01\0\x82\x01Ra\x01@a\x01 \x82\x01R_a\rja\x01@\x83\x01\x84a\x11\x84V[_\x80`@\x83\x85\x03\x12\x15a\x14\\W_\x80\xFD[PP\x80Q` \x90\x91\x01Q\x90\x92\x90\x91PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x82\x81\x12_\x83\x12\x80\x15\x82\x16\x82\x15\x82\x16\x17\x15a\x14\xA0Wa\x14\xA0a\x14mV[PP\x92\x91PPV[cNH{q`\xE0\x1B_R`\x01`\x04R`$_\xFD[_`\x01`\xFF\x1B\x82\x01a\x14\xD0Wa\x14\xD0a\x14mV[P_\x03\x90V[_` \x82\x84\x03\x12\x15a\x14\xE6W_\x80\xFD[\x81Qa\x11\xC4\x81a\x10\x1DV[_` \x82\x84\x03\x12\x15a\x15\x01W_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15\x16W_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x15&W_\x80\xFD[\x80Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15?Wa\x15?a\r\xFFV[\x80`\x05\x1Ba\x15O` \x82\x01a\x0E;V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x87\x84\x11\x15a\x15jW_\x80\xFD[` \x85\x01\x94P[\x83\x85\x10\x15a\x15\x90W\x84Q\x80\x83R` \x95\x86\x01\x95\x90\x93P\x90\x91\x01\x90a\x15qV[\x97\x96PPPPPPPV[\x80\x82\x01\x80\x82\x11\x15a\x06\\Wa\x06\\a\x14mV\xFE\xA2dipfsX\"\x12 \xD0(\n\xE4\xDF\xAA\x07\xBD\xB4\xEAr?q\xCBJ<\x8A#\xC4L\xDE\xE6K6\x81J\xDAT\x91\"y\xEEdsolcC\0\x08\x1A\x003", + b"`\x80`@R`\x046\x10a\0>W_5`\xE0\x1C\x80c\n[\x11\xE4\x14a\0BW\x80cH\x1Cju\x14a\0hW\x80cZk\xCF\xDA\x14a\0\xB3W\x80c\x91\xDDsF\x14a\0\xC6W[_\x80\xFD[a\0Ua\0P6`\x04a\x11\x0CV[a\0\xF2V[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[4\x80\x15a\0sW_\x80\xFD[Pa\0\x9B\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\0_V[a\0Ua\0\xC16`\x04a\x11\x92V[a\x02\nV[4\x80\x15a\0\xD1W_\x80\xFD[Pa\0\xE5a\0\xE06`\x04a\x11\xEFV[a\x02 V[`@Qa\0_\x91\x90a\x12\x89V[_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cH\xC8\x94\x91`@Q\x80`\xC0\x01`@R\x803`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01\x89\x81R` \x01\x88\x81R` \x01\x87\x81R` \x01\x86\x15\x15\x81R` \x01\x85\x15\x15\x81RP`@Q` \x01a\x01l\x91\x90a\x12\xE5V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x01\x97\x91\x90a\x12\x89V[_`@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x01\xB2W=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\x01\xD9\x91\x90\x81\x01\x90a\x13\x81V[\x80` \x01\x90Q\x81\x01\x90a\x01\xEC\x91\x90a\x13\xF5V[\x90PG\x80\x15a\x02\0Wa\x02\0_3\x83a\x079V[P\x95\x94PPPPPV[_a\x02\x18\x84\x84\x84_\x80a\0\xF2V[\x94\x93PPPPV[``3`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x02\x89W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rf\x06W'&\xF7\"\x03`\xCC\x1B`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[_a\x02\x96\x83\x85\x01\x85a\x14\x0CV[\x90P_a\x02\xF1a\x02\xAB\x83` \x01Q`\xA0\x90 \x90V[`@\x84\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x07\xD3V[PP\x90P_\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16cZk\xCF\xDA\x84` \x01Q\x85`@\x01Q\x86``\x01Q`@Q\x84c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x03R\x93\x92\x91\x90a\x14\xD3V[`@\x80Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x03mW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x03\x91\x91\x90a\x15\"V[P\x90P_a\x03\xEDa\x03\xA7\x85` \x01Q`\xA0\x90 \x90V[`@\x86\x01Q\x80Q` \x82\x01Q``\x90\x92\x01Q`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x93\x920\x92\x91a\x07\xD3V[PP\x90P_a\x04\x07\x85` \x01Q_\x01Q\x86_\x01Q0a\x08*V[\x92PPP_a\x04\"\x86` \x01Q` \x01Q\x87_\x01Q0a\x08*V[\x92PPP\x82`\x0F\x0B\x86`@\x01Q`@\x01Q\x86`\x0F\x0Ba\x04A\x91\x90a\x15XV[\x14a\x04\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7Fliquidity change incorrect\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02\x80V[_\x86`@\x01Q`@\x01Q\x12\x15a\x05*W_\x82\x13\x80a\x04\xABWP_\x81\x13[a\x04\xE1W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rferror 1`\xC8\x1B`D\x82\x01R`d\x01a\x02\x80V[_\x82\x12\x80a\x04\xEEWP_\x81\x12[\x15a\x05%W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rf2\xB997\xB9\x10\x19`\xC9\x1B`D\x82\x01R`d\x01a\x02\x80V[a\x05\xC1V[_\x86`@\x01Q`@\x01Q\x13\x15a\x05\xC1W_\x82\x12\x80a\x05GWP_\x81\x12[a\x05}W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rferror 3`\xC8\x1B`D\x82\x01R`d\x01a\x02\x80V[_\x82\x13\x80a\x05\x8AWP_\x81\x13[\x15a\x05\xC1W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x07`$\x82\x01Rf\x19\\\x9C\x9B\xDC\x88\r`\xCA\x1B`D\x82\x01R`d\x01a\x02\x80V[_\x82\x12\x15a\x06\x17W\x85Qa\x06\x17\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05\xFA\x85a\x15\x7FV[`\x80\x8A\x01Q` \x8B\x01QQ`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x08\xB6V[_\x81\x12\x15a\x06oW\x85Qa\x06o\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x06P\x84a\x15\x7FV[`\x80\x8A\x01Q` \x80\x8C\x01Q\x01Q`\x01`\x01`\xA0\x1B\x03\x16\x93\x92\x91\x90a\x08\xB6V[_\x82\x13\x15a\x06\xBEW\x85Q`\xA0\x87\x01Q` \x88\x01QQa\x06\xBE\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x86\x90a\x0B\x82V[_\x81\x13\x15a\x07\x0FW\x85Q`\xA0\x87\x01Q` \x80\x89\x01Q\x01Qa\x07\x0F\x92`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x91\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x90\x85\x90a\x0B\x82V[`@\x80Q` \x81\x01\x86\x90R\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x96PPPPPPP[\x92\x91PPV[_`\x01`\x01`\xA0\x1B\x03\x84\x16a\x07lW_\x80_\x80\x85\x87Z\xF1\x90P\x80a\x07gWa\x07gcV\xCD\xD0%`\xE1\x1Ba\x0CTV[a\x07\xCDV[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04\x82\x01R\x82`$\x82\x01R` _`D\x83_\x89Z\xF1=\x15`\x1F=\x11`\x01_Q\x14\x16\x17\x16\x91P_\x81R_` \x82\x01R_`@\x82\x01RP\x80a\x07\xCDWa\x07\xCDc'E\xA1O`\xE2\x1Ba\x0CTV[PPPPV[`@\x80Q`&\x81\x01\x83\x90R`\x06\x81\x01\x84\x90R`\x03\x81\x01\x85\x90R\x85\x81R`:`\x0C\x82\x01 _\x92\x82\x01\x83\x90R` \x82\x01\x83\x90R\x90\x82\x90R\x81\x90\x81\x90a\x08\x17\x8A\x8A\x83a\x0C\x81V[\x91\x9C\x90\x9BP\x90\x99P\x97PPPPPPPPV[_\x80\x80a\x08@`\x01`\x01`\xA0\x1B\x03\x87\x16\x86a\r$V[\x92Pa\x08u`\x01`\x01`\xA0\x1B\x03\x87\x16\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\r$V[\x91Pa\x08\xAB`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x85\x88a\r\xB3V[\x90P\x93P\x93P\x93\x90PV[\x80\x15a\tKW\x83`\x01`\x01`\xA0\x1B\x03\x16c\xF5)\x8A\xCA\x84a\x08\xE5\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01[_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\t0W_\x80\xFD[PZ\xF1\x15\x80\x15a\tBW=_\x80>=_\xFD[PPPPa\x0B{V[`\x01`\x01`\xA0\x1B\x03\x85\x16a\t\xC2W\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4\x83`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81\x85\x88Z\xF1\x15\x80\x15a\t\x97W=_\x80>=_\xFD[PPPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xBC\x91\x90a\x13\xF5V[Pa\x0B{V[`@Qc)a\x04e`\xE2\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x85\x16\x90c\xA5\x84\x11\x94\x90`$\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\n\x02W_\x80\xFD[PZ\xF1\x15\x80\x15a\n\x14W=_\x80>=_\xFD[PPPP`\x01`\x01`\xA0\x1B\x03\x83\x160\x14a\n\xA6W`@Qc#\xB8r\xDD`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16`\x04\x83\x01R\x85\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x86\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n|W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\n\xA0\x91\x90a\x15\x99V[Pa\x0B\x18V[`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`$\x82\x01\x84\x90R\x86\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\n\xF2W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\x16\x91\x90a\x15\x99V[P[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x11\xDA`\xB4`@Q\x81c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01` `@Q\x80\x83\x03\x81_\x87Z\xF1\x15\x80\x15a\x0BUW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0By\x91\x90a\x13\xF5V[P[PPPPPV[\x80a\x0B\xC4W`@Qc\x0B\r\x9C\t`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x81\x16`\x04\x83\x01R\x84\x81\x16`$\x83\x01R`D\x82\x01\x84\x90R\x85\x16\x90c\x0B\r\x9C\t\x90`d\x01a\t\x19V[\x83`\x01`\x01`\xA0\x1B\x03\x16c\x15n)\xF6\x84a\x0B\xED\x88`\x01`\x01`\xA0\x1B\x03\x16`\x01`\x01`\xA0\x1B\x03\x16\x90V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`$\x82\x01R`D\x81\x01\x85\x90R`d\x01_`@Q\x80\x83\x03\x81_\x87\x80;\x15\x80\x15a\x0C7W_\x80\xFD[PZ\xF1\x15\x80\x15a\x0CIW=_\x80>=_\xFD[PPPPPPPPPV[=`@Q\x82\x81R` `\x04\x82\x01R\x81`$\x82\x01R\x81_`D\x83\x01>` \x80`\x1F\x84\x01\x04\x02`D\x01\x91P\x81\x81\xFD[_\x80_\x80a\x0C\x8F\x86\x86a\x0EJV[`@Qc\x1A\xFE\xB1\x8D`\xE1\x1B\x81R`\x04\x81\x01\x82\x90R`\x03`$\x82\x01R\x90\x91P_\x90`\x01`\x01`\xA0\x1B\x03\x89\x16\x90c5\xFDc\x1A\x90`D\x01_`@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0C\xDDW=_\x80>=_\xFD[PPPP`@Q=_\x82>`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01`@Ra\r\x04\x91\x90\x81\x01\x90a\x15\xB4V[` \x81\x01Q`@\x82\x01Q``\x90\x92\x01Q\x90\x9A\x91\x99P\x97P\x95PPPPPPV[_`\x01`\x01`\xA0\x1B\x03\x83\x16a\rDWP`\x01`\x01`\xA0\x1B\x03\x81\x161a\x073V[`@Qcp\xA0\x821`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x04\x83\x01R\x84\x16\x90cp\xA0\x821\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\r\x88W=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\r\xAC\x91\x90a\x13\xF5V[\x90Pa\x073V[_\x80`\x01`\x01`\xA0\x1B\x03\x84\x16_R`\x01`\x01`\xA0\x1B\x03\x83\x16` R`@_ \x90P\x84`\x01`\x01`\xA0\x1B\x03\x16c\xF15\xBA\xAA\x82`@Q\x82c\xFF\xFF\xFF\xFF\x16`\xE0\x1B\x81R`\x04\x01a\x0E\x02\x91\x81R` \x01\x90V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E\x1DW=_\x80>=_\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0EA\x91\x90a\x13\xF5V[\x95\x94PPPPPV[_\x80a\x0EU\x84a\x0E\x9AV[\x90P_a\x0Ec`\x06\x83a\x16^V[`@\x80Q` \x81\x01\x87\x90R\x90\x81\x01\x82\x90R\x90\x91P``\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x92PPP\x92\x91PPV[`@Q_\x90a\x0E\xB9\x90\x83\x90`\x06\x90` \x01\x91\x82R` \x82\x01R`@\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Q`\xC0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0F\x0CWa\x0F\x0Ca\x0E\xD6V[`@R\x90V[`@Q`\x1F\x82\x01`\x1F\x19\x16\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0F:Wa\x0F:a\x0E\xD6V[`@R\x91\x90PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0FVW_\x80\xFD[PV[\x805`\x02\x81\x90\x0B\x81\x14a\x0FjW_\x80\xFD[\x91\x90PV[_`\xA0\x82\x84\x03\x12\x15a\x0F\x7FW_\x80\xFD[`@Q`\xA0\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x0F\xA1Wa\x0F\xA1a\x0E\xD6V[`@R\x90P\x80\x825a\x0F\xB2\x81a\x0FBV[\x81R` \x83\x015a\x0F\xC2\x81a\x0FBV[` \x82\x01R`@\x83\x015b\xFF\xFF\xFF\x81\x16\x81\x14a\x0F\xDCW_\x80\xFD[`@\x82\x01Ra\x0F\xED``\x84\x01a\x0FYV[``\x82\x01R`\x80\x83\x015a\x10\0\x81a\x0FBV[`\x80\x91\x90\x91\x01R\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\x10\x1DW_\x80\xFD[`@Q`\x80\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x82\x82\x10\x17\x15a\x10?Wa\x10?a\x0E\xD6V[`@R\x90P\x80a\x10N\x83a\x0FYV[\x81Ra\x10\\` \x84\x01a\x0FYV[` \x82\x01R`@\x83\x015`@\x82\x01R``\x83\x015``\x82\x01RP\x92\x91PPV[_`\x01`\x01`@\x1B\x03\x82\x11\x15a\x10\x94Wa\x10\x94a\x0E\xD6V[P`\x1F\x01`\x1F\x19\x16` \x01\x90V[_\x82`\x1F\x83\x01\x12a\x10\xB1W_\x80\xFD[\x815a\x10\xC4a\x10\xBF\x82a\x10|V[a\x0F\x12V[\x81\x81R\x84` \x83\x86\x01\x01\x11\x15a\x10\xD8W_\x80\xFD[\x81` \x85\x01` \x83\x017_\x91\x81\x01` \x01\x91\x90\x91R\x93\x92PPPV[\x80\x15\x15\x81\x14a\x0FVW_\x80\xFD[\x805a\x0Fj\x81a\x10\xF4V[_\x80_\x80_a\x01\x80\x86\x88\x03\x12\x15a\x11!W_\x80\xFD[a\x11+\x87\x87a\x0FoV[\x94Pa\x11:\x87`\xA0\x88\x01a\x10\rV[\x93Pa\x01 \x86\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11UW_\x80\xFD[a\x11a\x88\x82\x89\x01a\x10\xA2V[\x93PPa\x01@\x86\x015a\x11s\x81a\x10\xF4V[\x91Pa\x01`\x86\x015a\x11\x84\x81a\x10\xF4V[\x80\x91PP\x92\x95P\x92\x95\x90\x93PV[_\x80_a\x01@\x84\x86\x03\x12\x15a\x11\xA5W_\x80\xFD[a\x11\xAF\x85\x85a\x0FoV[\x92Pa\x11\xBE\x85`\xA0\x86\x01a\x10\rV[\x91Pa\x01 \x84\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x11\xD9W_\x80\xFD[a\x11\xE5\x86\x82\x87\x01a\x10\xA2V[\x91PP\x92P\x92P\x92V[_\x80` \x83\x85\x03\x12\x15a\x12\0W_\x80\xFD[\x825`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12\x15W_\x80\xFD[\x83\x01`\x1F\x81\x01\x85\x13a\x12%W_\x80\xFD[\x805`\x01`\x01`@\x1B\x03\x81\x11\x15a\x12:W_\x80\xFD[\x85` \x82\x84\x01\x01\x11\x15a\x12KW_\x80\xFD[` \x91\x90\x91\x01\x95\x90\x94P\x92PPPV[_\x81Q\x80\x84R\x80` \x84\x01` \x86\x01^_` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[` \x81R_a\x12\x9B` \x83\x01\x84a\x12[V[\x93\x92PPPV[\x80Q`\x01`\x01`\xA0\x1B\x03\x90\x81\x16\x83R` \x80\x83\x01Q\x82\x16\x90\x84\x01R`@\x80\x83\x01Qb\xFF\xFF\xFF\x16\x90\x84\x01R``\x80\x83\x01Q`\x02\x0B\x90\x84\x01R`\x80\x91\x82\x01Q\x16\x91\x01RV[` \x80\x82R\x82Q`\x01`\x01`\xA0\x1B\x03\x16\x82\x82\x01R\x82\x01Q_\x90a\x13\x0B`@\x84\x01\x82a\x12\xA2V[P`@\x83\x81\x01Q\x80Q`\x02\x90\x81\x0B`\xE0\x86\x01R` \x82\x01Q\x90\x0Ba\x01\0\x85\x01R\x90\x81\x01Qa\x01 \x84\x01R``\x90\x81\x01Qa\x01@\x84\x01R\x83\x01Qa\x01\xA0a\x01`\x84\x01Ra\x13[a\x01\xC0\x84\x01\x82a\x12[V[\x90P`\x80\x84\x01Q\x15\x15a\x01\x80\x84\x01R`\xA0\x84\x01Q\x15\x15a\x01\xA0\x84\x01R\x80\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x13\x91W_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x13\xA6W_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x13\xB6W_\x80\xFD[\x80Qa\x13\xC4a\x10\xBF\x82a\x10|V[\x81\x81R\x85` \x83\x85\x01\x01\x11\x15a\x13\xD8W_\x80\xFD[\x81` \x84\x01` \x83\x01^_\x91\x81\x01` \x01\x91\x90\x91R\x94\x93PPPPV[_` \x82\x84\x03\x12\x15a\x14\x05W_\x80\xFD[PQ\x91\x90PV[_` \x82\x84\x03\x12\x15a\x14\x1CW_\x80\xFD[\x815`\x01`\x01`@\x1B\x03\x81\x11\x15a\x141W_\x80\xFD[\x82\x01a\x01\xA0\x81\x85\x03\x12\x15a\x14CW_\x80\xFD[a\x14Ka\x0E\xEAV[\x815a\x14V\x81a\x0FBV[\x81Ra\x14e\x85` \x84\x01a\x0FoV[` \x82\x01Ra\x14w\x85`\xC0\x84\x01a\x10\rV[`@\x82\x01Ra\x01@\x82\x015`\x01`\x01`@\x1B\x03\x81\x11\x15a\x14\x95W_\x80\xFD[a\x14\xA1\x86\x82\x85\x01a\x10\xA2V[``\x83\x01RPa\x14\xB4a\x01`\x83\x01a\x11\x01V[`\x80\x82\x01Ra\x14\xC6a\x01\x80\x83\x01a\x11\x01V[`\xA0\x82\x01R\x94\x93PPPPV[a\x14\xDD\x81\x85a\x12\xA2V[\x82Q`\x02\x90\x81\x0B`\xA0\x83\x01R` \x84\x01Q\x90\x0B`\xC0\x82\x01R`@\x83\x01Q`\xE0\x82\x01R``\x83\x01Qa\x01\0\x82\x01Ra\x01@a\x01 \x82\x01R_a\x0EAa\x01@\x83\x01\x84a\x12[V[_\x80`@\x83\x85\x03\x12\x15a\x153W_\x80\xFD[PP\x80Q` \x90\x91\x01Q\x90\x92\x90\x91PV[cNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x80\x82\x01\x82\x81\x12_\x83\x12\x80\x15\x82\x16\x82\x15\x82\x16\x17\x15a\x15wWa\x15wa\x15DV[PP\x92\x91PPV[_`\x01`\xFF\x1B\x82\x01a\x15\x93Wa\x15\x93a\x15DV[P_\x03\x90V[_` \x82\x84\x03\x12\x15a\x15\xA9W_\x80\xFD[\x81Qa\x12\x9B\x81a\x10\xF4V[_` \x82\x84\x03\x12\x15a\x15\xC4W_\x80\xFD[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x15\xD9W_\x80\xFD[\x82\x01`\x1F\x81\x01\x84\x13a\x15\xE9W_\x80\xFD[\x80Q`\x01`\x01`@\x1B\x03\x81\x11\x15a\x16\x02Wa\x16\x02a\x0E\xD6V[\x80`\x05\x1Ba\x16\x12` \x82\x01a\x0F\x12V[\x91\x82R` \x81\x84\x01\x81\x01\x92\x90\x81\x01\x90\x87\x84\x11\x15a\x16-W_\x80\xFD[` \x85\x01\x94P[\x83\x85\x10\x15a\x16SW\x84Q\x80\x83R` \x95\x86\x01\x95\x90\x93P\x90\x91\x01\x90a\x164V[\x97\x96PPPPPPPV[\x80\x82\x01\x80\x82\x11\x15a\x073Wa\x073a\x15DV\xFE\xA2dipfsX\"\x12 \xA6Ri\x0Ey>\x1Dw \xA89\xF0T\xE2m\xCE\x04\xDB\x15\x86-\xA23\0n\xF3\xA3\xDE3\xB8\xC1:dsolcC\0\x08\x1A\x003", ); #[allow(non_camel_case_types, non_snake_case)] #[derive(Clone)] @@ -328,6 +328,7 @@ pub mod LiquidityProvider { } #[automatically_derived] impl alloy_sol_types::SolType for BalanceDelta { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = alloy::sol_types::private::I256; type Token<'a> = = None; type RustType = alloy::sol_types::private::Address; type Token<'a> = ::Token< 'a, @@ -609,6 +611,7 @@ struct ModifyLiquidityParams { int24 tickLower; int24 tickUpper; int256 liquidit } #[automatically_derived] impl alloy_sol_types::SolType for ModifyLiquidityParams { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = Self; type Token<'a> = ::RustType, pub currency1: ::RustType, @@ -869,6 +872,7 @@ struct PoolKey { Currency currency0; Currency currency1; uint24 fee; int24 tickS } #[automatically_derived] impl alloy_sol_types::SolType for PoolKey { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = Self; type Token<'a> = ::RustType, } diff --git a/src/bindings/poolmanager.rs b/src/bindings/poolmanager.rs index 9e2d96a..cd26d88 100644 --- a/src/bindings/poolmanager.rs +++ b/src/bindings/poolmanager.rs @@ -1460,6 +1460,7 @@ pub mod PoolManager { } #[automatically_derived] impl alloy_sol_types::SolType for BalanceDelta { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = alloy::sol_types::private::I256; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; @@ -1565,6 +1566,7 @@ pub mod PoolManager { } #[automatically_derived] impl alloy_sol_types::SolType for Currency { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = alloy::sol_types::private::Address; type Token<'a> = ::Token<'a>; @@ -1669,6 +1671,7 @@ pub mod PoolManager { } #[automatically_derived] impl alloy_sol_types::SolType for PoolId { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = alloy::sol_types::private::FixedBytes<32>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; @@ -1823,6 +1826,7 @@ pub mod PoolManager { } #[automatically_derived] impl alloy_sol_types::SolType for ModifyLiquidityParams { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = Self; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; const SOL_NAME: &'static str = ::NAME; @@ -2054,6 +2058,7 @@ pub mod PoolManager { } #[automatically_derived] impl alloy_sol_types::SolType for PoolKey { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = Self; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; const SOL_NAME: &'static str = ::NAME; @@ -2271,6 +2276,7 @@ pub mod PoolManager { } #[automatically_derived] impl alloy_sol_types::SolType for SwapParams { + const PACKED_ENCODED_SIZE: std::option::Option = None; type RustType = Self; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; const SOL_NAME: &'static str = ::NAME; diff --git a/src/lib.rs b/src/lib.rs index 0795543..9aa65b7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,7 +13,7 @@ use octane::{ AnvilProvider, }; use serde::{Deserialize, Serialize}; - +use alloy::providers::Provider; use crate::{ arbitrageur::Arbitrageur, bindings::{ @@ -65,89 +65,73 @@ mod tests { client: Arc, messager: Messager, ) -> Result>> { - let mut tokens = Vec::new(); - let mut stream = messager.clone().stream().unwrap(); - - messager.send(To::All, DeploymentRequest::Token { - name: "Arena Token 0".to_string(), - symbol: "ARENA0".to_string(), - decimals: 18, - }).await?; - - messager.send(To::All, DeploymentRequest::Token { - name: "Arena Token 1".to_string(), - symbol: "ARENA1".to_string(), - decimals: 18, - }).await?; - - while let Some(event) = stream.next().await { - let query: DeploymentResponse = match serde_json::from_str(&event.data) { - Ok(query) => query, - Err(_) => continue, - }; - - if let DeploymentResponse::Token(address) = query { - tokens.push(address); - } - - if tokens.len() == 2 { - break; - } - } - - if tokens[0] > tokens[1] { - tokens.swap(0, 1); - } - + let pool_manager = PoolManager::deploy(client.clone(), Uint::from(5000)).await.unwrap(); + + // Deploy tokens + let currency0 = ArenaToken::deploy(client.clone(), "ARENA0".to_string(), "ARENA0".to_string(), 18).await?; + let currency1 = ArenaToken::deploy(client.clone(), "ARENA1".to_string(), "ARENA1".to_string(), 18).await?; + + // Mint tokens + currency0.mint(Uint::from(2).pow(Uint::from(255))).send().await?.watch().await?; + currency1.mint(Uint::from(2).pow(Uint::from(255))).send().await?.watch().await?; + + // Ensure the token addresses are ordered + let (currency0, currency1) = if currency0.address() > currency1.address() { + (currency1, currency0) + } else { + (currency0, currency1) + }; + + // Create PoolKey let key = PoolKey { - currency0: tokens[0], - currency1: tokens[1], - fee: 3000, + currency0: *currency0.address(), + currency1: *currency1.address(), + fee: 2000, tickSpacing: 60, - hooks: Address::default() + hooks: Address::default(), }; - messager.send(To::All, DeploymentRequest::Pool(PoolParams { - key: key.clone(), - sqrt_price_x96: U256::from(79228162514264337593543950336_u128), - hook_data: Bytes::default(), - })).await?; - + let lp_key = LPoolKey { + currency0: key.currency0, + currency1: key.currency1, + fee: key.fee, + tickSpacing: key.tickSpacing, + hooks: key.hooks, + }; + + // Initialize pool + pool_manager.initialize(key.clone(), U256::from(79228162514264337593543950336_u128), Bytes::default()).send().await?.watch().await?; + + // Deploy LiquidityProvider + let liquidity_provider = LiquidityProvider::deploy(client.clone(), *pool_manager.address()).await.unwrap(); + + // Approve tokens for LiquidityProvider + currency0.approve(*liquidity_provider.address(), Uint::MAX).send().await?.watch().await?; + currency1.approve(*liquidity_provider.address(), Uint::MAX).send().await?.watch().await?; + + // Create ModifyLiquidityParams let modification = ModifyLiquidityParams { tickLower: -120, tickUpper: 120, - liquidityDelta: I256::from_str("1000000000000000000").unwrap(), - salt: as SolType>::abi_decode(&[0u8; 32], true) - .unwrap(), + liquidityDelta: I256::from_str("100000000000000000").unwrap(), + salt: as SolType>::abi_decode(&[0u8; 32], true).unwrap(), }; - - println!("{:#?}", modification); - - messager.send(To::All, AllocationRequest { - pool: key, - modification, - hook_data: Bytes::default(), - }).await?; - - Ok(Some(stream)) + + // Modify liquidity + let tx = liquidity_provider.modifyLiquidity_1(lp_key, modification, Bytes::default()); + let send_result = tx.send().await; + + println!("send result: {:#?}", send_result); + Ok(Some(messager.stream().unwrap())) } } #[tokio::test] async fn test_lp() { - env_logger::init(); - let harness = Agent::builder("harness").with_behavior(Harness::default()); - let deployer = Agent::builder("deployer") - .with_behavior(Deployer::default()); - - let liq_admin = Agent::builder("admin") - .with_behavior(LiquidityAdmin::default()); let mut world = World::new("id"); - world.add_agent(deployer); - world.add_agent(liq_admin); world.add_agent(harness); let _ = world.run().await; diff --git a/src/liquidity_admin.rs b/src/liquidity_admin.rs index 0c1739d..f459268 100644 --- a/src/liquidity_admin.rs +++ b/src/liquidity_admin.rs @@ -45,11 +45,13 @@ impl Behavior for LiquidityAdmin { } async fn process(&mut self, event: Message) -> Result { - let query: AllocationRequest = match serde_json::from_str(&event.data) { + let mut query: AllocationRequest = match serde_json::from_str(&event.data) { Ok(query) => query, Err(_) => return Ok(ControlFlow::Continue), }; + + let liquidity_provider = LiquidityProvider::deploy(self.base.client.clone().unwrap(), self.deployment.unwrap()) .await .unwrap(); @@ -79,14 +81,11 @@ impl Behavior for LiquidityAdmin { let lp_key = LPoolKey { currency0: key.currency0, currency1: key.currency1, - fee: key.fee, + fee: key.fee + 1, tickSpacing: key.tickSpacing, hooks: key.hooks, }; - println!("lp_key: {:#?}", lp_key); - println!("query.modification.tickLower: {:#?}", query.modification.tickLower); - let tx = liquidity_provider.modifyLiquidity_1( lp_key, query.modification, @@ -101,6 +100,7 @@ impl Behavior for LiquidityAdmin { // println!("watch result: {:#?}", watch_result); + Ok(ControlFlow::Continue) } }