From 48bf572eb8c87202e0a14dac19878dc28f3ace12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20Stu=CC=88ber?= <15174476+TorstenStueber@users.noreply.github.com> Date: Tue, 8 Oct 2024 03:56:37 -0300 Subject: [PATCH] Simplify Nabla project --- README.md | 18 +- nabla-pendulum/NablaCurve.contract | 635 ------------------ nabla-pendulum/README.md | 3 - nabla-pendulum/VendingMachine.contract | 582 ---------------- nabla-pendulum/_lib.ts | 85 --- nabla-pendulum/config.json | 107 --- nabla-pendulum/deploy/01_deploy_router.ts | 26 - .../deploy/02_deploy_token_wrappers.ts | 30 - .../deploy/03_deploy_oracle_wrappers.ts | 43 -- nabla-pendulum/deploy/04_deploy_curves.ts | 32 - nabla-pendulum/deploy/05_deploy_backstop.ts | 43 -- nabla-pendulum/deploy/06_deploy_swap_pools.ts | 115 ---- nabla/NablaCurve.contract | 635 ------------------ nabla/README.md | 7 +- nabla/VendingMachine.contract | 582 ---------------- nabla/_config_precompiledCurve.json | 97 --- nabla/_lib.ts | 50 +- nabla/config.json | 46 +- nabla/deploy/01_deploy_router.ts | 13 +- nabla/deploy/02_deploy_token_wrappers.ts | 83 +-- nabla/deploy/03_deploy_oracle_wrappers.ts | 51 +- nabla/deploy/04_deploy_curves.ts | 31 +- nabla/deploy/05_deploy_backstop.ts | 32 +- nabla/deploy/06_deploy_swap_pools.ts | 205 +++--- nabla/deploy/07_set_swap_fees.ts | 21 - .../deployments/foucoco}/mockTestnet.ts | 19 +- nabla/deployments/foucoco/slippageTest.ts | 105 +++ .../pendulum}/productionPendulum.ts | 5 +- .../pendulum}/usdcAxelarVortexPrototype.ts | 4 +- .../pendulum}/usdtVortexPrototype.ts | 4 +- .../deployments/selector.ts | 10 +- .../deployments/types.ts | 0 package.json | 7 +- tsconfig.json | 2 +- 34 files changed, 401 insertions(+), 3327 deletions(-) delete mode 100644 nabla-pendulum/NablaCurve.contract delete mode 100644 nabla-pendulum/README.md delete mode 100644 nabla-pendulum/VendingMachine.contract delete mode 100644 nabla-pendulum/_lib.ts delete mode 100644 nabla-pendulum/config.json delete mode 100644 nabla-pendulum/deploy/01_deploy_router.ts delete mode 100644 nabla-pendulum/deploy/02_deploy_token_wrappers.ts delete mode 100644 nabla-pendulum/deploy/03_deploy_oracle_wrappers.ts delete mode 100644 nabla-pendulum/deploy/04_deploy_curves.ts delete mode 100644 nabla-pendulum/deploy/05_deploy_backstop.ts delete mode 100644 nabla-pendulum/deploy/06_deploy_swap_pools.ts delete mode 100644 nabla/NablaCurve.contract delete mode 100644 nabla/VendingMachine.contract delete mode 100644 nabla/_config_precompiledCurve.json delete mode 100644 nabla/deploy/07_set_swap_fees.ts rename {nabla-pendulum/deployments => nabla/deployments/foucoco}/mockTestnet.ts (88%) create mode 100644 nabla/deployments/foucoco/slippageTest.ts rename {nabla-pendulum/deployments => nabla/deployments/pendulum}/productionPendulum.ts (94%) rename {nabla-pendulum/deployments => nabla/deployments/pendulum}/usdcAxelarVortexPrototype.ts (93%) rename {nabla-pendulum/deployments => nabla/deployments/pendulum}/usdtVortexPrototype.ts (94%) rename {nabla-pendulum => nabla}/deployments/selector.ts (68%) rename {nabla-pendulum => nabla}/deployments/types.ts (100%) diff --git a/README.md b/README.md index fb7c71f..bb50cab 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,25 @@ Usage for the example project: -1. Pull the Solidity source files from git: `npx ts-node src/index.ts pull nabla` -2. Deploy: `npx ts-node src/index.ts deploy nabla --network foucoco` +1. Pull the Solidity source files from git: `npx tsx src/index.ts pull nabla` +2. Deploy: `npx tsx src/index.ts deploy nabla --network foucoco --deployment mockTestnet` Alternatively you can use the parameter `local` instead of `foucoco`. This expects that there is a local chain running on port `9944` – this is particularly useful to run together with the [foucoco-standalone](https://github.com/pendulum-chain/foucoco-standalone) node. +## General deployment instructions + +The `deploy` command takes two required arguments: + +- `--network`: one of the networks defined in the file `nabla/config.json` (`pendulum`, `foucoco` or `local`) +- `--deployment`: one of the deployment definitions, see `nabla/deployments/selector.ts`: + - `usdtVortexPrototype`: described [on Notion](https://www.notion.so/satoshipay/24-05-16-USDT-Prototype-Deployment-1118b1b29b2f806f9070e734a10162d3) + - `usdcAxelarVortexPrototype`: described [on Notion](https://www.notion.so/satoshipay/24-07-04-USDC-axl-Prototype-Deployment-1118b1b29b2f80c7ba3ad321c6bb3e8b) + - `productionPendulum`: described [on Notion](https://www.notion.so/satoshipay/24-09-30-Public-Deployment-1118b1b29b2f807283dbd10e0a6ae8b9) + - `mockTestnet`: described [on Notion](https://www.notion.so/satoshipay/24-09-30-Nabla-Foucoco-Paseo-Deployment-1118b1b29b2f804eababf94383a56f7b) + - `slippageTest`: used for validating slippage calulcations, see [this page on Notion](https://www.notion.so/satoshipay/24-09-30-Public-Deployment-1118b1b29b2f807283dbd10e0a6ae8b9?pvs=4#1158b1b29b2f80bc8be8efb7bc5197b4) + # Required ``` @@ -90,4 +102,4 @@ subdirectories of `target/git`. These are only available if the `npm install` or `yarn install` command was executed successfully in the respective directory. This should automatically be done by the 'deploy' script though, so if you encounter this issue, try debugging -dependency issues in the respective `package.json` file. \ No newline at end of file +dependency issues in the respective `package.json` file. diff --git a/nabla-pendulum/NablaCurve.contract b/nabla-pendulum/NablaCurve.contract deleted file mode 100644 index acb4bf0..0000000 --- a/nabla-pendulum/NablaCurve.contract +++ /dev/null @@ -1,635 +0,0 @@ -{ - "contract": { - "authors": [ - "unknown" - ], - "description": "implementation of the Nabla slippage curve", - "name": "NablaCurve", - "version": "0.0.1" - }, - "source": { - "compiler": "solang 0.3.2", - "hash": "0x0450cfdb41fcb421ef6f82b14cf77ba28a1dc3dd2b1cbb9f64c186e2d9a7fa40", - "language": "Solidity 0.3.2", - "wasm": "0x0061736d0100000001400960097e7e7e7e7e7e7e7e7f017f60047f7f7f7f017f60000060057e7e7e7e7f017f60027f7f0060017f017f60047f7e7e7f0060037f7f7f0060037f7f7f017f027406057365616c300b7365616c5f72657475726e0007057365616c310b6765745f73746f726167650001057365616c320b7365745f73746f726167650001057365616c3005696e7075740004057365616c301176616c75655f7472616e73666572726564000403656e76066d656d6f7279020110100313120505020806060101000003000003030002020608017f01418080040b071102066465706c6f7900150463616c6c00160a96d001127b01047f2000220141086a10062202200136020420022001360200200241086a210002402001450d00200141016b2001410771220304400340200041003a0000200041016a2100200141016b2101200341016b22030d000b0b4107490d00034020004200370000200041086a2100200141086b22010d000b0b20020b950101047f41808004210103400240200128020c0d00200128020822022000490d002002200041076a41787122026b220441184f0440200120026a41106a22002001280200220336020020030440200320003602040b2000200441106b3602082000410036020c2000200136020420012000360200200120023602080b2001410136020c200141106a0f0b200128020021010c000b000b2e00418080044100360200418480044100360200418c80044100360200418880043f00411074419080046b3602000bd102020a7f027e2000411c6a210441082103027f03404100200341004c0d011a200341016b21032004280200200441046b2104450d000b200341016a0b210b2001411c6a21044108210302400340200341004c0d01200341016b21032004280200200441046b2104450d000b200341016a21060b200141046b210c41002101410121074100210503402008200120064e6a21080240200520052006486a220520092001200b4e6a22094d04404200210e0c010b200520096b210a200020084102746a2103200c20054102746a21044200210e0340200e4280808080107c200e200d200d200435020020033502007e7c220d561b210e200341046a2103200441046b2104200a41016b220a0d000b0b0240024020014108480440200220014102746a200d3e02000c010b200d4200520d010b200141016a22014110482107200d422088200e84210d20014110470d010b0b20070b5001017e02402003450d00200341c00071044020012003413f71ad862102420021010c010b20022003ad220486200141c00020036bad88842102200120048621010b20002002370308200020013703000b5001017e02402003450d00200341c00071044020022003413f71ad882101420021020c010b200241c00020036bad8620012003ad220488842101200220048821020b20002002370308200020013703000ba51102197e047f230041f0006b221e2400200041186a2903002105200041106a2903002107200041086a290300210620002903002109027f02402001290300220e420156200141086a290300220c420052200c501b200141106a290300220f420052200141186a290300220a420052200a5022201b200a200f84501b4504404101200ea741016b0d021a200242003703102002420037030820024200370300200241186a4200370300200320073703102003200937030020032006370308200341186a20053703000c010b2007200f8522042009200e85842005200a8522082006200c858484500440200242003703102002420037030820024200370300200241186a420037030020034200370310200341186a420037030020034201370300200342003703080c010b200720098420052006848442002009200e5a2006200c5a2006200c511b2007200f5a2005200a5a2005200a511b2004200884501b1b500440200220093703002002200637030820022007370310200241186a200537030020034200370310200341186a420037030020034200370300200342003703080c010b41c0012100027f02402005220450221f450d004180012100200722044200520d0041c0002100200622044200520d004100220020092204500d011a0b2000411f413f20044280808080105422011b221d41106b201d2004422086200420011b220442808080808080c0005422011b221d41086b201d2004421086200420011b2204428080808080808080015422011b221d41046b201d2004420886200420011b2204428080808080808080105422011b221d41026b201d2004420486200420011b2204428080808080808080c0005422011b6a2004420286200420011b423f87a7417f736a0b210041c0012101200a2104201e41306a200e200c4180012000027f02402020450d004180012101200f22044200520d0041c0002101200c22044200520d0041002201200e2204500d011a0b2001411f413f20044280808080105422001b221d41106b201d2004422086200420001b220442808080808080c0005422001b221d41086b201d2004421086200420001b2204428080808080808080015422001b221d41046b201d2004420886200420001b2204428080808080808080105422001b221d41026b201d2004420486200420001b2204428080808080808080c0005422001b6a2004420286200420001b423f87a7417f736a0b6b22006b100a201e41e0006a200f200a20001009201e41406b200e200c20004180016b1009201e41d0006a200e200c2000100941c001210120052104201e41e8006a290300201e41386a29030084201e41c8006a290300200041800149221d1b200a20001b2110201e290360201e29033084201e290340201d1b200f20001b210d201e41d8006a2903004200201d1b2111201e2903504200201d1b211241c0012100200a2108201e41106a42014200027f0240201f450d004180012101200722044200520d0041c0002101200622044200520d004100220120092204500d011a0b2001411f413f200442808080801054221d1b221f41106b201f20044220862004201d1b220442808080808080c00054221d1b221f41086b201f20044210862004201d1b22044280808080808080800154221d1b221f41046b201f20044208862004201d1b22044280808080808080801054221d1b221f41026b201f20044204862004201d1b2204428080808080808080c00054221d1b6a20044202862004201d1b423f87a7417f736a0b027f02402020450d004180012100200f22084200520d0041c0002100200c22084200520d0041002200200e2208500d011a0b2000411f413f20084280808080105422011b221d41106b201d2008422086200820011b220442808080808080c0005422011b221d41086b201d2004421086200420011b2204428080808080808080015422011b221d41046b201d2004420886200420011b2204428080808080808080105422011b221d41026b201d2004420486200420011b2204428080808080808080c0005422011b6a2004420286200420011b423f87a7417f736a0b6b22004180016b1009201e4201420041800120006b100a201e41206a4201420020001009200d2009201254200620115420062011511b2007200d54200520105420052010511b2007200d85200520108584501b221dad220b882010420186201d413f73ad22048684210820114201862004862012200b88842112201e290300201e29031020004180014922011b420020001b2213200b88201e41086a290300201e41186a29030020011b420020001b2214420186200486842116201e41286a290300420020011b2215420186200486201e290320420020011b200b88842117200d420186201d417f73413f71ad2204862011200b8884210d20134201862004862015200b888421112010200b8821042014200b88210b4200211042002113420021144200211503404200200d20092012542006200d542006200d511b2007200854200420055620042005511b2007200885200420058584501b22001b21184200201220001b211a4200200420001b211b20074200200820001b22195421014200200b20001b20158421154200201620001b20148421144200201120001b20138421134200201720001b20108421102011423f862017420188842117200d423f8620124201888421122016423f8620114201888421112008423f86200d42018884210d200b423f8620164201888421162004423f862008420188842108200b420188210b20044201882104200720197d22192009201a542200200620185420062018511bad221c7d21072009201a7d2209200e5a200620187d2000ad7d2206200c5a2006200c511b2007200f5a2005201b7d2001ad7d2019201c54ad7d2205200a5a2005200a511b2007200f852005200a8584501b0d000b200320103703002003201337030820032014370310200341186a201537030020022007370310200241186a200537030020022009370300200220063703080b41000b201e41f0006a24000b8f0402037e047f20002c001f2209410048044020004200200029030022057d370300200041086a220742002007290300220420054200522207ad7c7d370300200041106a22084200200829030022057d2206200720044200522004501bad22047d370300200041186a220742002004200656ad20072903002005420052ad7c7c7d3703000b20012c001f2208410048044020014200200129030022057d370300200141086a220742002007290300220420054200522207ad7c7d370300200141106a220a4200200a29030022057d2206200720044200522004501bad22047d370300200141186a220742002004200656ad20072903002005420052ad7c7c7d3703000b4101210702402000200120022003100b0d002008200973410048044020034200200329030022057d370300200341086a220042002000290300220420054200522200ad7c7d370300200341106a22014200200129030022057d2206200020044200522004501bad22047d370300200341186a220042002004200656ad20002903002005420052ad7c7c7d3703000b41002107200941004e0d0020024200200229030022057d370300200241086a220042002000290300220420054200522200ad7c7d370300200241106a22014200200129030022057d2206200020044200522004501bad22047d370300200241186a220042002004200656ad20002903002005420052ad7c7c7d3703000b20070bef0302037f067e230041e0016b22092400200941386a4200370300200941186a4200420020027d220c2000420052220b20014200522001501bad220d54ad20032002420052ad7c7c7d20032003420053220a1b3703002009420037033020094200370328200942808090bbbad6adf00d3703202009420020007d2000200a1b3703002009200c200d7d2002200a1b370310200942002001200bad7c7d2001200a1b37030802402009200941206a200941406b100820034200200941d8006a290300220e200941d0006a290300220d420052ad7c4200200d7d22102009290340220f420052220b200941c8006a290300220c420052200c501bad221154ad7c7d200e200a1b220e85423f88a72000200284200120038484420052717245044020094198016a2007370300200941f8006a200e370300200920043703800120094200200f7d200f200a1b370360200920053703880120094200200c200bad7c7d200c200a1b37036820092006370390012009201020117d200d200a1b370370200941e0006a20094180016a200941a0016a200941c0016a100c450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000bd00402057f067e230041e0016b22092400200941386a4200420020067d220e2004420052220c20054200522005501bad221054ad20072006420052ad7c7c7d20072007420053220a1b370300200941186a4200420020027d22112000420052220d20014200522001501bad220f54ad20032002420052ad7c7c7d20032003420053220b1b3703002009420020047d2004200a1b3703202009420020007d2000200b1b3703002009200e20107d2006200a1b370330200942002005200cad7c7d2005200a1b37032820092011200f7d2002200b1b370310200942002001200dad7c7d2001200b1b37030802402009200941206a200941406b10084200200941d8006a290300220f200941d0006a2903002210420052ad7c420020107d221220092903402211420052220c200941c8006a290300220e420052200e501bad221354ad7c7d200f200a200b73220a1b220f200320078585423f88502000200284200120038484502004200684200520078484507272457245044020094198016a4200370300200941f8006a200f37030020094200370390012009420037038801200942808090bbbad6adf00d370380012009420020117d2011200a1b37036020094200200e200cad7c7d200e200a1b3703682009201220137d2010200a1b370370200941e0006a20094180016a200941a0016a200941c0016a100c450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000baf0302037f037e230041e0016b22052400200541386a4200420020027d22082000420052220720014200522001501bad220954ad20032002420052ad7c7c7d2003200342005322061b220a370300200541186a200a3703002005420020007d200020061b220a3703202005200a3703002005200820097d200220061b22083703302005420020012007ad7c7d200120061b2209370328200520083703102005200937030802402005200541206a200541406b1008200541d8006a2903002208423f8850200020028420012003848450724572450440200541d0006a2903002100200541c8006a29030021012005290340210220054198016a4200370300200541f8006a200837030020054200370390012005420037038801200542808090bbbad6adf00d37038001200520023703602005200137036820052000370370200541e0006a20054180016a200541a0016a200541c0016a100c450d014101413041241000000b4101410041241000000b200420052903c001370300200441186a200541d8016a2903003703002004200541d0016a2903003703102004200541c8016a290300370308200541e0016a240041000bc50201017f230041e0016b22092400200941386a4200370300200941186a20033703002009420037033020094200370328200942808090bbbad6adf00d37032020092002370310200920013703082009200037030002402009200941206a200941406b1008450440200941d8006a2903002100200941d0006a2903002101200941c8006a29030021022009290340210320094198016a2007370300200941f8006a2000370300200920043703800120092003370360200920053703880120092002370368200920063703900120092001370370200941e0006a20094180016a200941a0016a200941c0016a100b450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000bc50201017f230041e0016b22092400200941386a2007370300200941186a200337030020092006370330200920053703282009200437032020092002370310200920013703082009200037030002402009200941206a200941406b1008450440200941d8006a2903002100200941d0006a2903002101200941c8006a29030021022009290340210320094198016a4200370300200941f8006a200037030020094200370390012009420037038801200942808090bbbad6adf00d37038001200920033703602009200237036820092001370370200941e0006a20094180016a200941a0016a200941c0016a100b450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000baa1902067f0e7e230041e0006b22072400200741386a4200370300200741186a20033703002007420037033020074200370328200742808090bbbad6adf00d37032020072002370310200720013703082007200037030002402007200741206a200741406b1008450440200741d8006a2903002111200741d0006a2903002112200741c8006a290300211520072903402116200741206b22092400027f4200210242002103230041b0086b2205240002400240201220168420112015848450450440200541206b2206220a2400027e201120128450044020162101201221022011210b20150c010b42800121032012210120110b2100027e2000200b842002845004402003210c200b0c010b200342407d220c20035422082008ad22134200542003200c581bad2214420054ad210f2000210120022100200b210242000b211002402000422086200142208884220e20104220862002422088842203842002422086200042208884220d2010422088220b84845004402001210e2000210d200221032010210b200c210120132110201421170c010b200f2014200c42207c2201200c54220820132008ad7c22102013542001200c5a1bad7c2217201454ad7c210f0b0240200d423086200e421088842213200b4230862003421088842200842003423086200d421088842202200b42108822188484500440200e2113200d210220032100200b21182001210c20102114201721100c010b200f2017200142107c220c200154220820102008ad7c22142010542001200c581bad7c2210201754ad7c210f0b02402002423886201342088884220e20184238862000420888842203842000423886200242088884220d2018420888220b84845004402013210e2002210d200021032018210b200c2101201421172010210c0c010b200f2010200c42087c2201200c54220820142008ad7c22172014542001200c5a1bad7c220c201054ad7c210f0b0240200d423c86200e420488842213200b423c862003420488842200842003423c86200d420488842202200b42048822188484500440200e2113200d210220032100200b2118200121032017210e200c21010c010b200f200c200142047c2203200154220820172008ad7c220e20175420012003581bad7c2201200c54ad7c210f0b02402002423e8620134202888422142018423e86200042028884220d842000423e86200242028884220b2018420288220c8484500440201321142002210b2000210d2018210c20032100200e2102200121030c010b200f2001200342027c22002003542208200e2008ad7c2202200e54200020035a1bad7c2203200154ad7c210f0b0240200b423f86201442018884200c423f86200d4201888484200d423f86200b200c8442018884845004402000210d2002210b200321000c010b200f2003200042017c220d200054220820022008ad7c220b2002542000200d581bad7c2200200354ad7c210f0b2006200d3703002006200b37030820062000370310200641186a200f370300200541106a420142002006290300420188a722064180016b100920054201420041800120066b100a200541206a4201420020061009200541c8006a2011370300200541e8006a200541086a290300200541186a29030020064180014922081b420020061b220b3703002005201637033020052015370338200520123703402005200541286a290300420020081b220037035820052005290320420020081b220137035020052005290300200529031020081b420020061b2202370360200541306a200541d0006a200541f0006a20054190016a100b0d02200541c8016a2011370300200541e8016a20022002200541a0016a2903007c220356ad200b200541a8016a2903007c7c2003200320012005290390017c220b20015422062006ad200020054198016a2903007c7c220120005420002001511bad7c220256ad7c220c420188220d370300200520163703b001200520153703b801200520123703c00120052001423f86200b4201888422033703d00120052002423f8620014201888422003703d8012005200c423f8620024201888422013703e001200541b0016a200541d0016a200541f0016a20054190026a100b0d02200541c8026a2011370300200541e8026a2001200541a0026a2903007c2202200154ad200d200541a8026a2903007c7c20022002200320032005290390027c220b5622062006ad200020054198026a2903007c7c220120005420002001511bad7c220356ad7c220c420188220d370300200520163703b002200520153703b802200520123703c00220052001423f86200b4201888422023703d00220052003423f8620014201888422003703d8022005200c423f8620034201888422013703e002200541b0026a200541d0026a200541f0026a20054190036a100b0d02200541c8036a2011370300200541e8036a2001200541a0036a2903007c2203200154ad200d200541a8036a2903007c7c20032003200220022005290390037c220b5622062006ad200020054198036a2903007c7c220120005420002001511bad7c220256ad7c220c420188220d370300200520163703b003200520153703b803200520123703c00320052001423f86200b4201888422033703d00320052002423f8620014201888422003703d8032005200c423f8620024201888422013703e003200541b0036a200541d0036a200541f0036a20054190046a100b0d02200541c8046a2011370300200541e8046a2001200541a0046a2903007c2202200154ad200d200541a8046a2903007c7c20022002200320032005290390047c220b5622062006ad200020054198046a2903007c7c220120005420002001511bad7c220356ad7c220c420188220d370300200520163703b004200520153703b804200520123703c00420052001423f86200b4201888422023703d00420052003423f8620014201888422003703d8042005200c423f8620034201888422013703e004200541b0046a200541d0046a200541f0046a20054190056a100b0d02200541c8056a2011370300200541e8056a2001200541a0056a2903007c2203200154ad200d200541a8056a2903007c7c20032003200220022005290390057c220b5622062006ad200020054198056a2903007c7c220120005420002001511bad7c220256ad7c220c420188220d370300200520163703b005200520153703b805200520123703c00520052001423f86200b4201888422033703d00520052002423f8620014201888422003703d8052005200c423f8620024201888422013703e005200541b0056a200541d0056a200541f0056a20054190066a100b0d02200541c8066a2011370300200541e8066a2001200541a0066a2903007c2202200154ad200d200541a8066a2903007c7c20022002200320032005290390067c220b5622062006ad200020054198066a2903007c7c220120005420002001511bad7c220356ad7c220c420188220d370300200520163703b006200520153703b806200520123703c00620052001423f86200b4201888422023703d00620052003423f8620014201888422003703d8062005200c423f8620034201888422013703e006200541b0066a200541d0066a200541f0066a20054190076a100b0d02200541c8076a2011370300200541e8076a2001200541a0076a2903007c2203200154ad200d200541a8076a2903007c7c20032003200220022005290390077c220c5622062006ad200020054198076a2903007c7c220120005420002001511bad7c220b56ad7c22034201882200370300200520163703b007200520153703b807200520123703c00720052001423f86200c42018884220d3703d0072005200b423f8620014201888422023703d80720052003423f86200b4201888422033703e007200541b0076a200541d0076a200541f0076a20054190086a100b0d02200529039008210e20054198086a290300210b200541a0086a290300210c200541a8086a2903002101200a41206b220624000240200d200e5a2002200b5a2002200b511b2003200c5a200020015a20002001511b2003200c85200020018584501b4504402006200d3703002006200237030820062003370310200641186a20003703000c010b2006200e3703002006200b3703082006200c370310200641186a20013703000b0c010b200942003703102009420037030820094200370300200941186a4200370300200541b0086a240041000c020b20092006290300370300200941186a200641186a2903003703002009200641106a2903003703102009200641086a290300370308200541b0086a240041000c010b4101413041241000000b2205450d01200741e0006a240020050f0b4101410041241000000b20042009290300370300200441186a200941186a2903003703002004200941106a2903003703102004200941086a290300370308200741e0006a240041000bc50201017f230041e0016b22052400200541386a2003370300200541186a200337030020052002370330200520013703282005200037032020052002370310200520013703082005200037030002402005200541206a200541406b1008450440200541d8006a2903002100200541d0006a2903002101200541c8006a29030021022005290340210320054198016a4200370300200541f8006a200037030020054200370390012005420037038801200542808090bbbad6adf00d37038001200520033703602005200237036820052001370370200541e0006a20054180016a200541a0016a200541c0016a100b450d014101413041241000000b4101410041241000000b200420052903c001370300200441186a200541d8016a2903003703002004200541d0016a2903003703102004200541c8016a290300370308200541e0016a240041000bcc0702037f047e2300210b0240024002402000200284200120038484500440200b41206b220a2400200a41186a4200370300200a4200370310200a4200370308200a42013703004188024120360200027e200a412041900241880210010440420021074200210642000c010b41a00229030021064198022903002107419002290300210c41a8022903000b2104200a41206b22092400200c200720062004200020012002200320091011220a450d030c020b200b41206b220924002000200120022003200420052006200720091010220a450d000c010b200941186a2903002100200941106a2903002102200941086a29030021012009290300210d200941206b220a240042002103200a41186a4200370300200a4200370310200a4200370308200a42013703004188024120360200200a41204190024188021001047e42000541a802290300210e41a002290300210c41900229030021034198022903000b210f200a41206b220924000240024002402003200f200c200e200420052006200720091011220a450440200020002000200242017d2203200254ad7c20032003200d42808090bbbad6adf00d7d2205200d54220a2001200aad7c42017d220420015420012004511bad7c220656ad7c42017d220385834200530d01200941186a2903002107200941106a290300210c200941086a290300210e2009290300210f200941206b2209240020052004200620032009100f220a0d04200941186a2903002103200941106a2903002104200941086a290300210520092903002106200941206b22092400027e0240200f200e200c200720062005200420032009100e220a450440200941186a2903002104200941106a2903002105200941086a290300210620092903002107200941206b220a2400200a41186a4200370300200a4200370310200a4200370308200a42023703004188024120360200200a41204190024188021001450d014200210c4200210e4200210342000c020b0c060b41a802290300210341a002290300210e419802290300210c4190022903000b210f2000200385427f85200020022002200e7c220256ad200020037c7c2002200d200d200f7c220d5622092009ad2001200c7c7c220320015420012003511bad7c2201200254ad7c220285834200530d02200a41206b220924002007200620052004200d2003200120022009100d220a450d030c040b0c030b4101410041241000000b4101410041241000000b0c010b200b2400200a0f0b20082009290300370300200841186a200941186a2903003703002008200941106a2903003703102008200941086a290300370308200b240041000b9e0802067f0e7e230041206b22002400100741880241808002360200419002418802100341840241880228020022013602002000411036020c200041106a2000410c6a10042000290310210a200041186a290300210b0240024002400240024002400240200141034d0d00418002419002280200220036020020004199eaea9805470d00200a200b8450450d01200141046b220020014b22022002720d052000413f4d0d022001200141046b2200490d05200041c0004b0d03027f419402290300210d419c02290300210c41a402290300210a41ac02290300210b41b402290300210e41bc02290300210f41c402290300211041cc022903002111230041206b2202240002400240024042808090bbbad6adf00d420042004200200e200f20102011200210102200450440200241106a29030022072002290300220642808090bbbad6adf00d7c22092006542200200241086a29030022082000ad7c221220085420062009581b2200ad7c22062007542201200241186a29030022082001ad7c2213200854200620075a1b200020001b0d02200241206b2200240020092012200620132000101222010d03200041106a29030022072000290300220642808090bbbad6adf00d7c22092006542201200041086a29030022082001ad7c221220085420062009581b2201ad7c22062007542203200041186a29030022082003ad7c2213200854200620075a1b200120011b0d02200041206b22002400200e200f2010201120092012200620132000101122010d03200d20002903007c2208200d5422012001ad200c200041086a2903007c7c2209200c542009200c511b2201200a200041106a2903007c22062001ad7c2207200a542006200756ad2006200a54ad200b200041186a2903007c7c7c2206200b542006200b511b2007200a852006200b8584501b450d010c020b200241206a240020000c030b41e00010062201200c3703082001200d370300200141d0006a2007370300200141c8006a2009370300200141406b22042008370300200141306a2010370300200141286a200f370300200141206a2205200e3703002001200a370310200141d8006a2006370300200141386a2011370300200141186a200b370300200041206b22002400200041186a22034200370300200042003703102000420037030820004200370300200041202001412010021a20034200370300200042003703102000420037030820004201370300200041202005412010021a20034200370300200042003703102000420037030820004202370300200041202004412010021a200241206a240041000c020b4101410041241000000b200241206a240020010b450d040c060b4101410041001000000b4101410041001000000b410141d00141241000000b410141d00141241000000b41004100100541086a41001000000b4101410041241000000b000bc17702097f317e230041206b22022400100741880241808002360200419002418802100341840241880228020022013602002002411036020c200241106a2002410c6a10042002290310210c200241186a290300210b23002106024002400240024002400240200141034d0d0041800241900228020022023602000240024002400240024002400240024002400240024020024197d98daa7e4c0440200241cfe1afb579460d01200241c7a3bfb67a460d04200241e2f8f0c57b470d0c200b200c84500d060c0c0b20024198d98daa7e460d0220024184d58bfc00460d01200241fa88cad806470d0b200b200c84500d040c0b0b200b200c844200520d0a200641206b22012400200141206b22022400200241206b22042400230041206b220624004188024120360200200641186a4200370300200642003703102006420037030820064200370300200641204190024188021001047e42000541a002290300210d419802290300210f419002290300210a41a8022903000b210c200641206b22002400200041186a42003703002000420037031020004200370308200042013703004188024120360200200041204190024188021001047e42000541a00229030021094198022903002114419002290300211541a8022903000b210b200041206b22002400200041186a42003703002000420037031020004200370308200042023703004188024120360200200041204190024188021001047e42000541a00229030021104198022903002111419002290300211e41a8022903000b211d2001200a3703002001200f3703082001200d370310200141186a2200200c370300200241186a2203200b37030020022015370300200220143703082002200937031020042010370310200441186a2205201d3703002004201e37030020042011370308200641206a2400200141086a290300210d200141106a29030021102000290300210c200241086a290300210a200241106a29030021142003290300210b200441086a2903002109200441106a29030021112005290300210f200129030021152002290300211e2004290300211d41e0001005220141e0006a200f370300200141d8006a2011370300200141d0006a2009370300200141c8006a201d370300200141406b200b370300200141386a2014370300200141306a200a370300200141286a201e370300200141206a200c370300200141186a2010370300200141106a200d370300200141086a220120153703004100200141e0001000000b200b200c844200520d09200141046b220220014b22042004720d0d200241ff004d0d0a2001200141046b2202490d0d20024180014d0d060c0a0b200b200c844200520d08200141046b220220014b22042004720d0c200241ff004d0d092001200141046b2202490d0c20024180014d0d060c090b200b200c844200520d07200141046b220220014b22042004720d0b2002413f4d0d082001200141046b2202490d0b200241c0004d0d060c080b200141046b220220014b22042004720d0a200241ff004b04402001200141046b2202490d0b20024180014d0d020c080b0c070b200141046b220220014b22042004720d09200241ff004b04402001200141046b2202490d0a20024180014d0d020c070b0c060b418c032903002121418403290300212241fc02290300212041f402290300212341ec02290300211a41e402290300212941dc02290300211141d402290300212641cc02290300212441c402290300212841bc02290300212a41b402290300211941ac02290300210941a402290300211d419c02290300210c419402290300210b200641206b22042400027f230041e0076b22012400027e0240200b20267d221e200b56200c20117d200b2026542202ad7d220b200c56200b200c511b201d20297d22262002200c201154200c2011511bad220c7d2211201d562009201a7d201d202954ad7d200c202656ad7d220c2009562009200c511b2011201d852009200c8584501b450440200141206b22022400200241186a42003703002002420037031020024200370308200242023703004188024120360200200241204190024188021001450d0142000c020b0c0b0b41a0022903002114419802290300210d419002290300211041a8022903000b2109200241206b22002400024002400240024002400240024002400240201e200b2011200c2019202a20282024200010142202450440027e0240202320002903007c221a20235422022002ad2020200041086a2903007c7c222920205420202029511b22022022200041106a2903007c22202002ad7c221d202254201d202054ad2020202254ad2021200041186a2903007c7c7c222020215420202021511b201d202285202020218584501b450440200041206b22022400200241186a42003703002002420037031020024200370308200242013703004188024120360200200241204190024188021001450d0142000c020b0c150b41a802290300211541a002290300210a419802290300210f4190022903000b21122009427f85200920092014201042808090bbbad6adf00d7c22212010542200200d2000ad7c2222200d5420102021581bad7c2226201454ad7c222385834200530d13200241206b220024002012200f200a20152010200d201420092000100e22020d06200041186a290300210e200041106a290300211b200041086a290300211320002903002116200041206b220022032400201e200b2011200c2000100f22020d07200141186a4200370300200141386a42004200201b7d22182016420052220520134200522013501bad221754ad200e201b420052ad7c7c7d200e200e42005322021b3703002001420037031020014200370308200142043703002001420020132005ad7c7d201320021b3703282001420020167d201620021b3703202001201820177d201b20021b370330200041186a2903002127200041106a2903002125200041086a290300212b2000290300212c2001200141206a200141406b1008200e4200200141d8006a2903002217200141d0006a290300221f420052ad7c4200201f7d222d2001290340221c4200522205200141c8006a29030022184200522018501bad222e54ad7c7d201720021b221785423f88a72016201b84200e2013848442005271720d13200141f8006a420037030020014198016a42004200200a7d220e20124200522207200f420052200f501bad221354ad2015200a420052ad7c7c7d2015201542005322001b37030020014200370370200142003703682001420437036020014200200f2007ad7c7d200f20001b370388012001420020127d201220001b370380012001200e20137d200a20001b37039001200141e0006a20014180016a200141a0016a100820154200200141b8016a2903002216200141b0016a2903002213420052ad7c420020137d222f20012903a001221b4200522207200141a8016a290300220e420052200e501bad223054ad7c7d201620001b221685423f88a7200a201284200f2015848442005271720d132016201785427f852017202d202e7d201f20021b221f202f20307d201320001b7c2213201f54ad201620177c7c201320134200201c7d201c20021b22164200201b7d201b20001b7c221b20165422082008ad420020182005ad7c7d201820021b22164200200e2007ad7c7d200e20001b7c7c220e201654200e2016511bad7c221656ad7c221385834200530d132013201320132016201642017d221856ad7c2018201b201b42808090bbbad6adf00d7d2216562202200e2002ad7c42017d221b200e54200e201b511bad7c220e201854ad7c42017d221885834200530d13200341206b220024002016201b200e2018202c202b202520272000100e22020d06200041186a290300220e4200200e200041106a2903002213420052ad7c420020137d222f200029030022304200522203200041086a29030022274200522027501bad223154ad7c7d221b834200530d13200041206b22002400201e200b2011200c2012200f200a20152000100e22020d06200041186a290300210e200041106a2903002113200041086a29030021162000290300200041206b2200240020162013200e2019202a202820242000100e22020d08200141d8016a4200370300200141f8016a4200200041186a290300220e200041106a2903002216420052ad7c420020167d2217200029030022184200522205200041086a29030022134200522013501bad221f54ad7c7d200e200e42005322021b370300200142003703d001200142003703c801200142083703c0012001420020187d201820021b3703e0012001420020132005ad7c7d201320021b3703e80120012017201f7d201620021b3703f001200141c0016a200141e0016a20014180026a1008200e420020014198026a290300222520014190026a290300221f420052ad7c4200201f7d222b200129038002221c420052220520014188026a29030022174200522017501bad222c54ad7c7d202520021b222585423f88a72016201884200e2013848442005271720d13200041206b220024004200201c7d201c20021b420020172005ad7c7d201720021b202b202c7d201f20021b202520212022202620232000100e22020d07200041186a2903002116200041106a2903002125200041086a29030021182000290300212b200041206b22002400201e200b2011200c2010200d201420092000100e22020d06200041186a290300210e200041106a2903002113200041086a29030021172000290300200041206b2200240020172013200e2019202a202820242000100e22020d08200141b8026a4200370300200141d8026a4200200041186a290300220e200041106a2903002217420052ad7c420020177d221c2000290300221f4200522205200041086a29030022134200522013501bad222c54ad7c7d200e200e42005322021b370300200142003703b002200142003703a802200142023703a00220014200201f7d201f20021b3703c0022001420020132005ad7c7d201320021b3703c8022001201c202c7d201720021b3703d002200141a0026a200141c0026a200141e0026a1008200e4200200141f8026a290300222e200141f0026a290300222c420052ad7c4200202c7d223220012903e002222d4200522205200141e8026a290300221c420052201c501bad223354ad7c7d202e20021b222e85423f88a72017201f84200e2013848442005271720d132016202e85427f8520162025203220337d202c20021b7c220e202554ad2016202e7c7c200e202b4200202d7d202d20021b7c2217202b5422072007ad20184200201c2005ad7c7d201c20021b7c7c221320185420132018511bad7c2218200e54ad7c220e85834200530d13200e201b85427f85201b2018202f20317d221f7c2216201f54ad200e201b7c7c2016420020307d220e20177c2218200e5422022002ad2013420020272003ad7c7d22177c7c220e201754200e2017511bad7c2217201654ad7c221685834200530d1320014198036a4200370300200141b8036a4200420020117d2213201e4200522203200b420052200b5022051bad221b54ad200c2011420052ad7c7c7d200c200c42005322021b37030020014200370390032001420037038803200142023703800320014200200b2003ad7c7d200b20021b3703a80320014200201e7d201e20021b3703a00320012013201b7d201120021b3703b00320014180036a200141a0036a200141c0036a1008200c4200200141d8036a290300221c200141d0036a290300221b420052ad7c4200201b7d222720012903c003221f4200522203200141c8036a29030022134200522013501bad222554ad7c7d201c20021b221c85423f88a72011201e84200b200c848442005271720d13200041206b220024004200201f7d201f20021b420020132003ad7c7d201320021b202720257d201b20021b201c20212022202620232000100e22020d07200041186a2903002113200041106a290300211b200041086a290300211f2000290300200041206b22002400201f201b2013201a2029201d20202000100e22020d062016200041186a290300221385427f8520162017200041106a2903007c221b201754ad201320167c7c201b201820002903007c221720185422022002ad200e200041086a2903007c7c2213200e54200e2013511bad7c2218201b54ad7c220e85834200530d13200041206b220024002019202a202820242000101322020d06200041186a290300211b200041106a2903002116200041086a290300211f2000290300211c200041206b220024002012200f200a2015201c201f2016201b2000100e22020d06200041186a290300210a200041106a290300210f200041086a29030021152000290300200041206b220024002015200f200a20212022202620232000100e22020d09200141f8036a420037030020014198046a4200200041186a290300220a200041106a2903002215420052ad7c420020157d221b200029030022124200522203200041086a290300220f420052200f501bad221654ad7c7d200a200a42005322021b370300200142003703f003200142003703e803200142043703e0032001420020127d201220021b3703800420014200200f2003ad7c7d200f20021b370388042001201b20167d201520021b37039004200141e0036a20014180046a200141a0046a1008200a4200200141b8046a290300221c200141b0046a2903002216420052ad7c420020167d222720012903a004221f4200522203200141a8046a290300221b420052201b501bad222554ad7c7d201c20021b221c85423f88a72012201584200a200f848442005271720d13200e201c85200e200e201c7d2018202720257d201620021b220a54ad7d2018200a7d222e20174200201f7d201f20021b222f54220720134200201b2003ad7c7d201b20021b221f542013201f511bad223054ad7d221b85834200530d13200041206b220024002010200d201420092000100f22020d06200041186a2903002131200041106a2903002132200041086a29030021332000290300200041206b220024002019202a202820242000101322020d06200041186a290300210e200041106a290300211c200041086a290300211620002903002127200041206b220024002019202a20282024201a2029201d20202000100e22020d06200041186a290300210a200041106a2903002115200041086a290300210f20002903002112200041206b22002400201a2029201d20202000100f22020d07200141d8046a4200370300200141f8046a4200420020157d221820124200522203200f420052200f501bad222554ad200a2015420052ad7c7c7d200a200a42005322021b370300200142003703d004200142003703c804200142023703c00420014200200f2003ad7c7d200f20021b3703e8042001420020127d201220021b3703e0042001201820257d201520021b3703f004200041186a2903002125200041106a2903002135200041086a290300213620002903002137200141c0046a200141e0046a20014180056a1008200a420020014198056a290300222d20014190056a290300222b420052ad7c4200202b7d2238200129038005222c420052220320014188056a29030022184200522018501bad223954ad7c7d202d20021b222d85423f88a72012201584200a200f848442005271720d13200e202d85427f85200e201c203820397d202b20021b7c220f201c54ad200e202d7c7c200f20274200202c7d202c20021b7c221520275422082008ad2016420020182003ad7c7d201820021b7c7c220a201654200a2016511bad7c2212200f54ad7c220f85834200530d13200f202585427f85200f2012201220357c220e56ad200f20257c7c200e2015201520377c22125622022002ad200a20367c7c2215200a54200a2015511bad7c220a200e54ad7c220e85834200530d13200041206b2200240020332032203120122015200a200e2000100e22020d09201b200041186a290300220a85427f85201b202e20307d2215200041106a2903007c220f201554ad200a201b7c7c200f2017202f7d220a20002903007c2216200a5422022002ad2013201f7d2007ad7d2215200041086a2903007c7c220a201554200a2015511bad7c2213200f54ad7c221585834200530d13200141b8056a4200370300200141d8056a4200420020147d220f20104200522203200d420052200d501bad221254ad20092014420052ad7c7c7d2009200942005322021b370300200142003703b005200142003703a805200142023703a00520014200200d2003ad7c7d200d20021b3703c8052001420020107d201020021b3703c0052001200f20127d201420021b3703d005200141a0056a200141c0056a200141e0056a100820094200200141f8056a290300220f200141f0056a290300221b420052ad7c4200201b7d221820012903e005220e4200522203200141e8056a29030022124200522012501bad221754ad7c7d200f20021b220f85423f88a720102014842009200d848442005271720d13200041206b220024004200200e7d200e20021b220e420020122003ad7c7d201220021b2212201820177d201b20021b221b200f2019202a202820242000100e22020d07200041186a2903002118200041106a2903002117200041086a290300211f2000290300200041206b22002400201f20172018201a2029201d20202000100e22020d06200f427f85200f200f201b200e42808090bbbad6adf00d7c2218200e54220220122002ad7c2217201254200e2018581bad7c221f201b54ad7c221c85834200530d13200041186a290300210f200041106a290300210e200041086a29030021122000290300211b200041206b2200240020182017201f201c201a2029201d20202000100e22020d06200041186a2903002118200041106a2903002117200041086a290300211f2000290300200041206b22002400201f20172018201a2029201d20202000100e22020d06200f200041186a290300221785427f85200f200e200e200041106a2903007c221856ad200f20177c7c20182018201b201b20002903007c22175622022002ad2012200041086a2903007c7c220e201254200e2012511bad7c221b56ad7c221285834200530d132012201585427f8520152013201b7c220f201354ad201220157c7c200f201620177c221320165422022002ad200a200e7c7c2212200a54200a2012511bad7c220a200f54ad7c220f85834200530d13200041206b2200240020132012200a200f2000101222020d09200041186a290300210a200041206b22022400200a4200530d01200041106a290300210f200041086a290300211520022000290300370300200220153703082002200f370310200241186a2200200a3703002000290300210a200241106a2903002115200241086a290300210f20022903002112200241206b220024002010200d201420092019202a202820242000100e22020d06200041186a2903002114200041106a2903002109200041086a290300210d20002903002124200041206b220024002021202220262023201a2029201d20202000100e22020d06200c4200420020117d221d201e4200522202200b42005220051bad222054ad200c2011420052ad7c7c7d2210834200530d1320102014852010201020147d201d20207d220c200954ad7d200c20097d22094200201e7d221120245422034200200b2002ad7c7d2214200d54200d2014511bad220b54ad7d220c85834200530d13200c200041186a290300221085427f85200c2009200b7d2209200041106a2903007c220b200954ad200c20107c7c200b200b201120247d221020002903007c220920105422022002ad2014200d7d2003ad7d220d200041086a2903007c7c2210200d54200d2010511bad7c220d56ad7c220b85834200530d13200a200b85427f85200b200d200d20157c221156ad200a200b7c7c20112011200920127c220c20095422022002ad200f20107c7c220d201054200d2010511bad7c221456ad7c221085834200530d13200041206b2202240002402010420053044020104200420020147d220b200c4200522200200d420052200d501bad220954ad20102014420052ad7c7c7d221183420059044020024200200c7d37030020024200200d2000ad7c7d3703082002200b20097d370310200241186a20113703000c020b0c150b2002200c3703002002200d37030820022014370310200241186a20103703000b200241186a290300210b200241106a2903002109200241086a29030021112002290300211e200241206b220224000240200a4200530440200a4200420020157d221d20124200522200200f420052200f501bad222054ad200a2015420052ad7c7c7d22158342005904402002420020127d37030020024200200f2000ad7c7d3703082002201d20207d370310200241186a20153703000c020b0c150b200220123703002002200f37030820022015370310200241186a200a3703000b200141b8066a420037030020014198066a200241186a290300370300200142003703b006200142003703a8062001428094ebdc033703a00620012002290300370380062001200241106a290300370390062001200241086a2903003703880620014180066a200141a0066a200141c0066a200141e0066a100c0d0220012903e006201e542011200141e8066a290300220a56200a2011511b2009200141f0066a290300221156200b200141f8066a290300220a55200a200b511b2009201185200a200b8584501b450d0320014198076a4200370300200141b8076a4200420020267d220a2021420052220320224200522022501bad220b54ad20232026420052ad7c7c7d2023202342005322001b3703002001420037039007200142003703880720014202370380072001420020222003ad7c7d202220001b3703a8072001420020217d202120001b3703a0072001200a200b7d202620001b3703b00720014180076a200141a0076a200141c0076a100820234200200141d8076a2903002211200141d0076a290300220b420052ad7c4200200b7d220f20012903c00722094200522205200141c8076a290300220a420052200a501bad221554ad7c7d201120001b221185423f88a7202120268420222023848442005271720d13200241206b22032400200c200d20142010420020097d200920001b4200200a2005ad7c7d200a20001b200f20157d200b20001b20112003100d22020d07200341186a290300210d200341206b22022400200d4200530d04200341106a2903002110200341086a290300210c200220032903003703002002200c37030820022010370310200241186a200d3703000c050b0c050b410141800141151000000b4101413041241000000b410141a00141221000000b410141e00041161000000b20042002290300370300200441186a200241186a2903003703002004200241106a2903003703102004200241086a290300370308200141e0076a240041000c040b200141e0076a240020020c030b200141e0076a240020020c020b200141e0076a240020020c010b200141e0076a240020020b450d070c060b418c032903002119418403290300211a41fc02290300211241f402290300212841ec02290300212641e402290300212141dc02290300211541d402290300212441cc02290300210d41c402290300211041bc02290300210c41b402290300211441ac02290300210b41a4022903002109419c022903002111419402290300210f200641206b22042400027f230041a0056b22012400027e0240200f20247d221b200f56201120157d200f2024542202ad7d222a2011562011202a511b200920217d22242002201120155420112015511bad22157d2229200956200b20267d2009202154ad7d2015202456ad7d2226200b56200b2026511b2009202985200b20268584501b450440200141206b22022400200241186a42003703002002420037031020024200370308200242013703004188024120360200200241204190024188021001450d0142000c020b0c0a0b41a802290300211e41a002290300211d41980229030021204190022903000b2121200241206b22022400200241186a42003703002002420037031020024200370308200242023703004188024120360200200241204190024188021001047e42000541a00229030021224198022903002123419002290300210a41a8022903000b2124024002400240200f20287c2228200f5422002000ad201120127c7c221520115420112015511b22002009201a7c22112000ad7c220f200954200f201154ad2009201156ad200b20197c7c7c2211200b54200b2011511b2009200f85200b20118584501b450440200241206b2200240020212020201d201e200a2023202220242000100e22020d02200041186a290300210b200041106a2903002109200041086a29030021192000290300200041206b220024002014200c2010200d2000101322020d02200041186a2903002112200041106a290300210e200041086a290300211320002903002116200041206b2200240020192009200b20162013200e20122000100e22020d03200141186a4200370300200141386a4200200041186a290300220b200041106a2903002219420052ad7c420020197d22122000290300221a4200522203200041086a29030022094200522009501bad220e54ad7c7d200b200b42005322021b37030020014200370310200142003703082001420437030020014200201a7d201a20021b3703202001420020092003ad7c7d200920021b37032820012012200e7d201920021b3703302001200141206a200141406b1008200b4200200141d8006a2903002216200141d0006a290300220e420052ad7c4200200e7d2218200129034022134200522203200141c8006a29030022124200522012501bad221754ad7c7d201620021b221685423f88a72019201a842009200b848442005271720d0c201642002016201820177d200e20021b220b420052ad7c4200200b7d221f420020137d201320021b221c4200522205420020122003ad7c7d201220021b22134200522013501bad222754ad7c7d2219834200530d0c200041206b2200240020212020201d201e200a2023202220242000100e22020d02200041186a290300210b200041106a2903002109200041086a290300211a2000290300200041206b22002400201a2009200b2014200c2010200d2000100e22020d02200041186a290300210b200041106a2903002109200041086a290300211a2000290300200041206b22002400201a2009200b20282015200f20112000100e22020d03200141f8006a420037030020014198016a4200200041186a290300220b200041106a290300221a420052ad7c4200201a7d220e200029030022124200522203200041086a29030022094200522009501bad221654ad7c7d200b200b42005322021b3703002001420037037020014200370368200142043703602001420020127d201220021b370380012001420020092003ad7c7d200920021b370388012001200e20167d201a20021b37039001200141e0006a20014180016a200141a0016a1008200b4200200141b8016a2903002217200141b0016a2903002216420052ad7c420020167d222520012903a00122184200522203200141a8016a290300220e420052200e501bad222b54ad7c7d201720021b221785423f88a72012201a842009200b848442005271720d0c2017201985427f852019201f20277d220b2025202b7d201620021b7c2209200b54ad201720197c7c20094200201c7d220b420020187d201820021b7c2216200b5422072007ad420020132005ad7c7d221a4200200e2003ad7c7d200e20021b7c7c220b201a54200b201a511bad7c2218200954ad7c221a85834200530d0c200041206b220024002014200c2010200d2000101322020d02200041186a2903002109200041106a2903002119200041086a29030021122000290300210e200041206b2200240020212020201d201e200e2012201920092000100e22020d03200141d8016a4200370300200141f8016a4200200041186a2903002209200041106a2903002212420052ad7c420020127d22132000290300220e4200522203200041086a29030022194200522019501bad221754ad7c7d2009200942005322021b370300200142003703d001200142003703c801200142043703c00120014200200e7d200e20021b3703e0012001420020192003ad7c7d201920021b3703e8012001201320177d201220021b3703f001200141c0016a200141e0016a20014180026a10082009420020014198026a290300221c20014190026a2903002217420052ad7c420020177d2227200129038002221f420052220320014188026a29030022134200522013501bad222554ad7c7d201c20021b221c85423f88a7200e20128420092019848442005271720d0c201a201c85201a201a201c7d2018202720257d201720021b220954ad7d201820097d222720164200201f7d201f20021b2225542205200b420020132003ad7c7d201320021b221854200b2018511bad222b54ad7d221285834200530d0c200041206b2200240020212020201d201e2014200c2010200d2000100e22020d02200041186a2903002109200041106a2903002119200041086a290300211a2000290300200041206b22002400201a2019200920282015200f20112000100e22020d03200141b8026a4200370300200141d8026a4200200041186a2903002209200041106a290300221a420052ad7c4200201a7d22132000290300220e4200522203200041086a29030022194200522019501bad221754ad7c7d2009200942005322021b370300200142003703b002200142003703a802200142043703a00220014200200e7d200e20021b3703c0022001420020192003ad7c7d201920021b3703c8022001201320177d201a20021b3703d002200141a0026a200141c0026a200141e0026a100820094200200141f8026a290300221c200141f0026a2903002217420052ad7c420020177d222c20012903e002221f4200522203200141e8026a29030022134200522013501bad222d54ad7c7d201c20021b221c85423f88a7200e201a8420092019848442005271720d0c2012201c85427f8520122027202b7d2219202c202d7d201720021b7c2209201954ad2012201c7c7c20092009201620257d22194200201f7d201f20021b7c221a20195422072007ad200b20187d2005ad7d2219420020132003ad7c7d201320021b7c7c220b201954200b2019511bad7c220e56ad7c221985834200530d0c200041206b22002400200a2023202220242000100f22020d02200041186a2903002109200041106a2903002112200041086a29030021132000290300200041206b220024002014200c2010200d2000101322020d02200041186a2903002118200041106a2903002117200041086a290300211f2000290300211c200041206b22002400201320122009201c201f201720182000100e22020d022019200041186a290300220985427f852019200e200041106a2903007c2212200e54ad200920197c7c2012201a20002903007c2216201a5422022002ad200b200041086a2903007c7c2209200b542009200b511bad7c2218201254ad7c221a85834200530d0c200041206b22002400200a2023202220242014200c2010200d2000100e22020d02200041186a290300210b200041106a2903002119200041086a29030021122000290300200041206b2200240020122019200b20282015200f20112000100e22020d0320014198036a4200370300200141b8036a4200200041186a290300220b200041106a2903002212420052ad7c420020127d22132000290300220e4200522203200041086a29030022194200522019501bad221754ad7c7d200b200b42005322021b37030020014200370390032001420037038803200142023703800320014200200e7d200e20021b3703a0032001420020192003ad7c7d201920021b3703a8032001201320177d201220021b3703b00320014180036a200141a0036a200141c0036a1008200b4200200141d8036a290300221c200141d0036a2903002217420052ad7c420020177d222720012903c003221f4200522203200141c8036a29030022134200522013501bad222554ad7c7d201c20021b221c85423f88a7200e201284200b2019848442005271720d0c201a201c85427f85201a2018202720257d201720021b7c2219201854ad201a201c7c7c2019201920164200201f7d201f20021b7c221220165422052005ad2009420020132003ad7c7d201320021b7c7c220b2009542009200b511bad7c220e56ad7c220985834200530d0c200041206b2200240020282015200f20112000100f22020d022009200041186a290300221a85427f852009200e200e200041106a2903007c221956ad2009201a7c7c201920192012201220002903007c220e5622022002ad200b200041086a2903007c7c221a200b54200b201a511bad7c221256ad7c221985834200530d0c200041206b2200240020212020201d201e2014200c2010200d2000100e22020d02200041186a290300210b200041106a290300211e200041086a29030021092000290300211d200041206b22002400200a2023202220242014200c2010200d2000100e22020d02200041186a2903002122200041106a2903002123200041086a290300210c20002903002124200041206b22002400027e0240200e201a20122019200010122202450440200041186a2903002119200041106a290300210e200041086a290300211320002903002116200041206b220222002400200241186a42003703002002420037031020024200370308200242013703004188024120360200200241204190024188021001450d014200210d420021104200210a42000c020b0c040b41a802290300210a41a0022903002110419802290300210d4190022903000b2114200141f8036a420037030020014198046a42004200201e7d2220201d420052220320094200522009501bad222154ad200b201e420052ad7c7c7d200b200b42005322021b370300200142003703f003200142003703e803200142023703e0032001420020092003ad7c7d200920021b3703880420014200201d7d201d20021b370380042001202020217d201e20021b37039004200141e0036a20014180046a200141a0046a1008200b4200200141b8046a2903002221200141b0046a290300221a420052ad7c4200201a7d221820012903a00422124200522203200141a8046a29030022204200522020501bad221754ad7c7d202120021b222185423f88a7201d201e842009200b848442005271720d0c20212022852021202120227d201820177d201a20021b220b202354ad7d200b20237d221e420020127d201220021b221d2024542205420020202003ad7c7d202020021b2209200c542009200c511bad222054ad7d220b85834200530d0c200b201185427f85200b201e20207d221e200f7c220f201e54ad200b20117c7c200f200f201d20247d221e20287c2211201e5422022002ad2009200c7d2005ad7d220920157c7c220c2009542009200c511bad7c221556ad7c220985834200530d0c2009201985427f8520092015200e20157c220b56ad200920197c7c200b200b2011201120167c220f5622022002ad200c20137c7c2211200c54200c2011511bad7c221556ad7c220b85834200530d0c2010201442808090bbbad6adf00d7c220c2014542202200d200d2002ad7c220956200c20145a1b2202ad7c220d2010542203200a200a2003ad7c221456200d20105a1b200220021b0d0c200141d8046a4200370300200141f8046a20143703002001200c3703e004200142003703d004200142003703c804200142023703c004200120093703e8042001200d3703f004200141c0046a200141e0046a20014180056a10080d0c20014198056a290300210d20014190056a290300211020014188056a290300210c200129038005210a200041206b22002400200f20112015200b200a200c2010200d2000101022020d0220002903002210201b7d220b201056200041086a290300220d202a7d2010201b542202ad7d220a200d56200a200d511b200041106a290300221020297d220c2002200d202a54200d202a511bad22097d2214201056200041186a290300220d20267d2010202954ad7d2009200c56ad7d220c200d56200c200d511b2010201485200c200d8584501b450d010c0c0b0c0b0b2004200b3703002004200a37030820042014370310200441186a200c370300200141a0056a240041000c020b200141a0056a240020020c010b200141a0056a240020020b450d060c050b418c032903002110418403290300210c41fc02290300210b41f402290300210941ec02290300212441e402290300211e41dc02290300211441d402290300211d41cc02290300212041c402290300212141bc02290300212241b402290300212341ac02290300210f41a4022903002115419c02290300210d419402290300210a200641206b22042400027f2300210202400240024002400240200a201d7d2211200a56200d20147d200a201d542201ad7d220a200d56200a200d511b2015201e7d221d2001200d201454200d2014511bad220d7d2214201556200f20247d2015201e54ad7d200d201d56ad7d220d200f56200d200f511b2014201585200d200f8584501b4504402009201158200a200b5a200a200b5122001b200c201458200d20105a200d2010511b200c201485200d20108584501b450d01200241206b220124002011200a2014200d20232022202120202001101422030d02201120097d2215201156200a200b7d20092011562203ad7d2211200a56200a2011511b2014200c7d221e2003200a200b5420001bad220a7d220f201456200d20107d200c201456ad7d200a201e56ad7d220a200d56200a200d511b200f201485200a200d8584501b0d05200141186a290300211e200141106a2903002114200141086a290300210d2001290300211d200141206b2201240020152011200f200a20232022202120202001101422000d0320092009201d7c22115622002000ad200b200d7c7c220d200b54200b200d511b2200200c20147c22142000ad7c220a200c54200a201454ad200c201456ad2010201e7c7c7c221420105420102014511b200a200c85201020148584501b0d0520112001290300220c7d220b201156200d200141086a29030022107d200c2011562200ad7d220c200d56200c200d511b200a200141106a29030022097d22112000200d201054200d2010511bad220d7d2210200a562014200141186a2903007d2009200a56ad7d200d201156ad7d220d201456200d2014511b200a201085200d20148584501b450d040c050b0c040b4101410041001000000b2002240020030c030b2002240020000c020b2004200b3703002004200c37030820042010370310200441186a200d3703002002240041000c010b0c070b450d050c040b418c032903002114418403290300211041fc02290300210d41f402290300210b41ec02290300212441e402290300212241dc02290300211141d402290300212341cc02290300210f41c402290300211541bc02290300210941b402290300211e41ac02290300211d41a4022903002120419c02290300210a419402290300210c200641206b22042400027f230021020240024002400240200c20237d2221200c56200a20117d200c2023542201ad7d220c200a56200a200c511b202020227d22232001200a201154200a2011511bad220a7d2211202056201d20247d2020202254ad7d200a202356ad7d220a201d56200a201d511b2011202085200a201d8584501b450440200241206b220124002021200c2011200a201e20092015200f2001101422000d012021200b7d2222202156200c200d7d200b2021562200ad7d221d200c56200c201d511b201120107d22212000200c200d54200c200d511bad220c7d2220201156200a20147d2010201156ad7d200c202156ad7d220c200a56200a200c511b2011202085200a200c8584501b0d04201e200b7d2221201e562009200d7d200b201e562200ad7d221120095620092011511b201520107d220a20002009200d542009200d511bad221e7d2209201556200f20147d2010201556ad7d200a201e54ad7d220a200f56200a200f511b2009201585200a200f8584501b0d04200141186a290300210f200141106a2903002115200141086a290300211e20012903002123200141206b220124002022201d2020200c202120112009200a2001101422000d02200b200b20237c22095622002000ad200d201e7c7c220c200d54200c200d511b2200201020157c220a2000ad7c220d201054200a200d56ad200a201054ad200f20147c7c7c220a201454200a2014511b200d201085200a20148584501b0d042009200129030022147d220b200956200c200141086a29030022107d20092014542200ad7d2214200c56200c2014511b200d200141106a29030022097d22112000200c201054200c2010511bad22107d220c200d56200a200141186a2903007d2009200d56ad7d2010201156ad7d2210200a56200a2010511b200c200d85200a20108584501b450d030c040b0c030b2002240020000c030b2002240020000c020b2004200b370300200420143703082004200c370310200441186a20103703002002240041000c010b0c060b450d040c030b41cc02290300210d41c402290300211041bc02290300210c41b402290300210a41ac02290300211441a402290300210b419c022903002109419402290300200641206b220424002009200b2014200a200c2010200d20041014450d030c020b4101410041001000000b410141d00141241000000b200624000c020b200441086a290300210d200441106a2903002110200441186a290300210c2004290300210a41201005220141206a200c370300200141186a2010370300200141106a200d370300200141086a2201200a3703004100200141201000000b4101410041241000000b000b0b7e060041000b054e487b71110041300b054e487b71120041e0000b1608c379a04453444d6174683a20554e444552464c4f57004180010b1508c379a04055444d6174683a204f564552464c4f570041a0010b2208c379a0744e61626c6143757276653a204445504f5349545f544f4f5f534d414c4c0041d0010b044e487b71008e010970726f64756365727302086c616e6775616765010143000c70726f6365737365642d62790105636c616e676131352e302e34202868747470733a2f2f6769746875622e636f6d2f736f6c616e612d6c6162732f6c6c766d2d70726f6a6563742e676974203333633336323963616135396235396438663538353733366134613531393461613965393337376429" - }, - "spec": { - "constructors": [ - { - "args": [ - { - "label": "_alpha", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_beta", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "new", - "payable": false, - "returnType": null, - "selector": "0x19b51a53" - } - ], - "docs": [ - "implementation of the Nabla slippage curve" - ], - "environment": { - "accountId": { - "displayName": [ - "AccountId" - ], - "type": 5 - }, - "balance": { - "displayName": [ - "Balance" - ], - "type": 6 - }, - "blockNumber": { - "displayName": [ - "BlockNumber" - ], - "type": 7 - }, - "chainExtension": { - "displayName": [], - "type": 0 - }, - "hash": { - "displayName": [ - "Hash" - ], - "type": 8 - }, - "maxEventTopics": 4, - "timestamp": { - "displayName": [ - "Timestamp" - ], - "type": 7 - } - }, - "events": [], - "lang_error": { - "displayName": [ - "SolidityError" - ], - "type": 12 - }, - "messages": [ - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "params", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "NablaCurve", - "params", - "return_type" - ], - "type": 2 - }, - "selector": "0xcff0ab96" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_depositAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts deposit amount by slippage for a pool of a given coverage ratio" - ], - "label": "effectiveDeposit", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x7a84126b" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_deltaAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts amount by slippage for a swap adding liquidity to this pool total swap fee is the sum of the swap fees of each pool involved" - ], - "label": "effectiveSwapIn", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x623cbcb8" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_deltaAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts amount by slippage for a swap draining liquidity from this pool total swap fee is the sum of the swap fees of each pool involved" - ], - "label": "effectiveSwapOut", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x84ea820f" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_withdrawalAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts withdrawal amount by slippage for a pool of a given coverage ratio" - ], - "label": "effectiveWithdrawal", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x986c43e5" - }, - { - "args": [ - { - "label": "_reserves", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilities", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "phi", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0xc7d1cfa6" - } - ] - }, - "storage": { - "struct": { - "fields": [ - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 0 - } - }, - "name": "alpha" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 0 - } - }, - "name": "beta" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 0 - } - }, - "name": "c" - } - ], - "name": "Params" - } - }, - "root_key": "0x00000000" - } - }, - "name": "params" - } - ], - "name": "NablaCurve" - } - }, - "types": [ - { - "id": 0, - "type": { - "def": { - "primitive": "u256" - }, - "path": [ - "uint256" - ] - } - }, - { - "id": 1, - "type": { - "def": { - "composite": { - "fields": [ - { - "name": "alpha", - "type": 0 - }, - { - "name": "beta", - "type": 0 - }, - { - "name": "c", - "type": 0 - } - ] - } - }, - "path": [ - "Params" - ] - } - }, - { - "id": 2, - "type": { - "def": { - "tuple": [ - 0, - 0, - 0 - ] - }, - "path": [ - "NablaCurve", - "params", - "return_type" - ] - } - }, - { - "id": 3, - "type": { - "def": { - "primitive": "u8" - }, - "path": [ - "uint8" - ] - } - }, - { - "id": 4, - "type": { - "def": { - "array": { - "len": 32, - "type": 3 - } - } - } - }, - { - "id": 5, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 4 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "AccountId" - ] - } - }, - { - "id": 6, - "type": { - "def": { - "primitive": "u128" - }, - "path": [ - "uint128" - ] - } - }, - { - "id": 7, - "type": { - "def": { - "primitive": "u64" - }, - "path": [ - "uint64" - ] - } - }, - { - "id": 8, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 4 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "Hash" - ] - } - }, - { - "id": 9, - "type": { - "def": { - "primitive": "str" - }, - "path": [ - "string" - ] - } - }, - { - "id": 10, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 9 - } - ] - } - }, - "path": [ - "0x08c379a0" - ] - } - }, - { - "id": 11, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 0 - } - ] - } - }, - "path": [ - "0x4e487b71" - ] - } - }, - { - "id": 12, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 10 - } - ], - "index": 0, - "name": "Error" - }, - { - "fields": [ - { - "type": 11 - } - ], - "index": 1, - "name": "Panic" - } - ] - } - }, - "path": [ - "SolidityError" - ] - } - } - ], - "version": "4" -} \ No newline at end of file diff --git a/nabla-pendulum/README.md b/nabla-pendulum/README.md deleted file mode 100644 index 26623dd..0000000 --- a/nabla-pendulum/README.md +++ /dev/null @@ -1,3 +0,0 @@ -This folder is experimental and needs to be removed eventually and moved to the Nabla repository. - -The configuration in this folder is used to deploy Nabla to Pendulum diff --git a/nabla-pendulum/VendingMachine.contract b/nabla-pendulum/VendingMachine.contract deleted file mode 100644 index 4a55d52..0000000 --- a/nabla-pendulum/VendingMachine.contract +++ /dev/null @@ -1,582 +0,0 @@ -{ - "contract": { - "authors": [ - "unknown" - ], - "description": "Stateful mock AMM to test the slippage curve.", - "name": "VendingMachine", - "version": "0.0.1" - }, - "source": { - "compiler": "solang 0.3.2", - "hash": "0xe97f9f08e110bebda42374e68365dbe231846f5bd0bc9ee1a21efbd175acba90", - "language": "Solidity 0.3.2", - "wasm": "0x0061736d0100000001350860027f7f0060000060047f7f7f7f017f60017f017f60047f7e7e7f0060087f7f7e7f7f7f7f7f017f60037f7f7f0060027f7f017f02960108057365616c310b6765745f73746f726167650002057365616c31097365616c5f63616c6c0005057365616c300b7365616c5f72657475726e0006057365616c320b7365745f73746f726167650002057365616c3007616464726573730000057365616c3005696e7075740000057365616c301176616c75655f7472616e73666572726564000003656e76066d656d6f727902011010030a090007030104040301010608017f01418080040b071102066465706c6f79000e0463616c6c000f0ac1a901095301017f410421020340200141036a20002d00003a0000200141026a20002d00013a0000200141016a20002d00023a0000200120002d00033a0000200041046a2100200141046b2101200241046b22020d000b0bb30201047f2000220241086a10092204200036020420042000360200200441086a210002402001417f4704402002450d01200241016b2002410771220304400340200020012d00003a0000200041016a2100200141016a2101200241016b2102200341016b22030d000b0b4107490d010340200020012d00003a0000200020012d00013a0001200020012d00023a0002200020012d00033a0003200020012d00043a0004200020012d00053a0005200020012d00063a0006200020012d00073a0007200041086a2100200141086a2101200241086b22020d000b0c010b2002450d00200241016b2002410771220104400340200041003a0000200041016a2100200241016b2102200141016b22010d000b0b4107490d00034020004200370000200041086a2100200241086b22020d000b0b20040b950101047f41808004210103400240200128020c0d00200128020822022000490d002002200041076a41787122026b220441184f0440200120026a41106a22002001280200220336020020030440200320003602040b2000200441106b3602082000410036020c2000200136020420012000360200200120023602080b2001410136020c200141106a0f0b200128020021010c000b000b2e00418080044100360200418480044100360200418c80044100360200418880043f00411074419080046b3602000b5001017e02402003450d00200341c00071044020012003413f71ad862102420021010c010b20022003ad220486200141c00020036bad88842102200120048621010b20002002370308200020013703000b5001017e02402003450d00200341c00071044020022003413f71ad882101420021020c010b200241c00020036bad8620012003ad220488842101200220048821020b20002002370308200020013703000bd22202207e257f230041b0016b222324000240024020002903402202200029030022047d2206200256200041c8006a2903002201200041086a29030022037d20022004542221ad7d220420015620012004511b200041d0006a2903002202200041106a29030022077d22082021200120035420012003511bad22037d2205200256200041d8006a2903002201200041186a2903007d2002200754ad7d2003200856ad7d220320015620012003511b2002200585200120038584501b450440202341206b222122222400202141186a420037030020214200370310202142003703082021420037030041980141203602002021412041a0014198011000212141a0012d0000212441a1012d0000212541a2012d0000212841a3012d0000212941a4012d0000212a41a5012d0000212b41a6012d0000212c41a7012d0000212741a8012d0000212d41a9012d0000212e41aa012d0000212f41ab012d0000213041ac012d0000213141ad012d0000213241ae012d0000213341af012d0000213441b0012d0000213541b1012d0000213641b2012d0000213741b3012d0000213841b4012d0000213941b5012d0000213a41b6012d0000213b41b7012d0000213c41b8012d0000213d41b9012d0000213e41ba012d0000213f41bb012d0000214041bc012d0000214141bd012d0000214241be012d0000214341bf012d0000214441c400417f10082126202341a69fc7be7c36020c2023410c6a202641086a22451007202641246a20033703002026411c6a2005370300202641146a20043703002026410c6a2006370300200041286a2903002101200041306a290300210220002903202103202641c4006a200041386a2903003703002026413c6a2002370300202641346a20013703002026412c6a200337030020234100204420211b3a002f20234100204320211b3a002e20234100204220211b3a002d20234100204120211b3a002c20234100204020211b3a002b20234100203f20211b3a002a20234100203e20211b3a002920234100203d20211b3a002820234100203c20211b3a002720234100203b20211b3a002620234100203a20211b3a002520234100203920211b3a002420234100203820211b3a002320234100203720211b3a002220234100203620211b3a002120234100203520211b3a002020234100203420211b3a001f20234100203320211b3a001e20234100203220211b3a001d20234100203120211b3a001c20234100203020211b3a001b20234100202f20211b3a001a20234100202e20211b3a001920234100202d20211b3a001820234100202720211b3a001720234100202c20211b3a001620234100202b20211b3a001520234100202a20211b3a001420234100202920211b3a001320234100202820211b3a001220234100202520211b3a001120234100202420211b3a00102026280200212441980141808002360200202241106b2221240020214200370308202142003703004100202341106a4200202120452024410020261b41a00141980110012221450d0220214102470d01410141980128020041a0011008220041086a2000280200410020001b1002000b4101413041241002000b4101410041001002000b41980128020041a00110082221280200410020211b2226411f4d04404101410041241002000b41980128020041a00110082121202641204d044002400240202141206a2903002203200041186a2903002201852003200320017d202141186a2903002204200041106a290300220154ad7d200420017d221c202141086a29030022192000290300221d54222b202141106a2903002214200041086a290300221a542014201a511bad221e54ad7d22158583420059044020192201200029030056200041086a22212903002205201422025420022005511b2004200041106a22262903002206562003200041186a222229030022055620032005511b2004200685200320058584501b450440202229030021032026290300210420212903002102200029030021010b202341e8006a4200370300202341c8006a2003370300202342003703602023420037035820234290ce00370350202320013703302023200237033820232004370340202341306a22222c001f2228410048044020224200202229030022027d370300202241086a220042002000290300220120024200522200ad7c7d370300202241106a22214200202129030022027d2203200020014200522001501bad22017d370300202241186a220042002001200356ad20002903002002420052ad7c7c7d3703000b202341d0006a22242c001f222c410048044020244200202429030022027d370300202441086a220042002000290300220120024200522200ad7c7d370300202441106a22214200202129030022027d2203200020014200522001501bad22017d370300202441186a220042002001200356ad20002903002002420052ad7c7c7d3703000b202341f0006a212120234190016a212641012129230041f0006b22002400202241186a2903002103202241106a2903002105202241086a290300210420222903002106027f02402024290300220b420156202441086a29030022084200522008501b202441106a290300220c420052202441186a2903002207420052200750222a1b2007200c84501b4504404101200ba741016b0d021a202142003703102021420037030820214200370300202141186a4200370300202620053703102026200637030020262004370308202641186a20033703000c010b2005200c8522012006200b85842003200785220220042008858484500440202142003703102021420037030820214200370300202141186a420037030020264200370310202641186a420037030020264201370300202642003703080c010b200520068420032004848442002006200b5a200420085a20042008511b2005200c5a200320075a20032007511b2001200284501b1b500440202120063703002021200437030820212005370310202141186a200337030020264200370310202641186a420037030020264200370300202642003703080c010b41c0012122027f024020032201502227450d004180012122200522014200520d0041c0002122200422014200520d004100222220062201500d011a0b2022411f413f20014280808080105422241b222541106b20252001422086200120241b220142808080808080c0005422241b222541086b20252001421086200120241b2201428080808080808080015422241b222541046b20252001420886200120241b2201428080808080808080105422241b222541026b20252001420486200120241b2201428080808080808080c0005422241b6a2001420286200120241b423f87a7417f736a0b212241c001212420072101200041306a200b20084180012022027f0240202a450d004180012124200c22014200520d0041c0002124200822014200520d0041002224200b2201500d011a0b2024411f413f20014280808080105422221b222541106b20252001422086200120221b220142808080808080c0005422221b222541086b20252001421086200120221b2201428080808080808080015422221b222541046b20252001420886200120221b2201428080808080808080105422221b222541026b20252001420486200120221b2201428080808080808080c0005422221b6a2001420286200120221b423f87a7417f736a0b6b22226b100c200041e0006a200c20072022100b200041406b200b200820224180016b100b200041d0006a200b20082022100b41c001212420032101200041e8006a290300200041386a29030084200041c8006a29030020224180014922251b200720221b210d2000290360200029033084200029034020251b200c20221b210a200041d8006a290300420020251b210e2000290350420020251b210f41c001212220072102200041106a42014200027f02402027450d004180012124200522014200520d0041c0002124200422014200520d004100222420062201500d011a0b2024411f413f20014280808080105422251b222741106b20272001422086200120251b220142808080808080c0005422251b222741086b20272001421086200120251b2201428080808080808080015422251b222741046b20272001420886200120251b2201428080808080808080105422251b222741026b20272001420486200120251b2201428080808080808080c0005422251b6a2001420286200120251b423f87a7417f736a0b027f0240202a450d004180012122200c22024200520d0041c0002122200822024200520d0041002222200b2202500d011a0b2022411f413f20024280808080105422241b222541106b20252002422086200220241b220142808080808080c0005422241b222541086b20252001421086200120241b2201428080808080808080015422241b222541046b20252001420886200120241b2201428080808080808080105422241b222541026b20252001420486200120241b2201428080808080808080c0005422241b6a2001420286200120241b423f87a7417f736a0b6b22224180016b100b20004201420041800120226b100c200041206a420142002022100b200a2006200f542004200e542004200e511b2005200a542003200d542003200d511b2005200a852003200d8584501b2225ad220988200d4201862025413f73ad220186842102200e420186200186200f20098884210f2000290300200029031020224180014922241b420020221b2210200988200041086a290300200041186a29030020241b420020221b2211420186200186842113200041286a290300420020241b22124201862001862000290320420020241b200988842116200a4201862025417f73413f71ad220186200e20098884210a2010420186200186201220098884210e200d2009882101201120098821094200210d42002110420021114200211203404200200a2006200f542004200a542004200a511b2002200556200120035620012003511b2002200585200120038584501b22221b21174200200f20221b211b4200200120221b211f20054200200220221b22185421244200200920221b20128421124200201320221b20118421114200200e20221b20108421104200201620221b200d84210d200e423f862016420188842116200a423f86200f42018884210f2013423f86200e42018884210e2002423f86200a42018884210a2009423f8620134201888421132001423f8620024201888421022009420188210920014201882101200520187d22182006201b542222200420175420042017511bad22207d21052006201b7d2206200b5a200420177d2022ad7d220420085a20042008511b2005200c5a2003201f7d2024ad7d2018202054ad7d220320075a20032007511b2005200c85200320078584501b0d000b2026200d3703002026201037030820262011370310202641186a201237030020212005370310202141186a200337030020212006370300202120043703080b41000b2122200041f0006a2400024020220d002028202c73410048044020264200202629030022027d370300202641086a220042002000290300220120024200522200ad7c7d370300202641106a22224200202229030022027d2203200020014200522001501bad22017d370300202641186a220042002001200356ad20002903002002420052ad7c7c7d3703000b41002129202841004e0d0020214200202129030022027d370300202141086a220042002000290300220120024200522200ad7c7d370300202141106a22264200202629030022027d2203200020014200522001501bad22017d370300202141186a220042002001200356ad20002903002002420052ad7c7c7d3703000b20290d012023290390012019201d7d542014201a7d202bad7d220120234198016a29030022025620012002511b201c201e7d2202202341a0016a2903002203562015202341a8016a29030022015520012015511b2002200385200120158584501b0d02202341b0016a240041000f0b4101413041241002000b410141e00041241002000b410141840141091002000b4101410041241002000b8c0602207f027e230041206b22002400100a4198014180800236020041a001419801100541940141980128020022013602002000411036020c200041106a2000410c6a100620002903102120200041186a2903002121230041406a22002400024002400240024002400240200141034d0d0041900141a0012802002202360200200241c28795d17b470d00202020218450450d01200141046b220220014b22032003720d052002411f4d0d022001200141046b2202490d05200241204b0d0341c3012d0000210141c2012d0000210241c1012d0000210341c0012d0000210441bf012d0000210541be012d0000210641bd012d0000210741bc012d0000210841bb012d0000210941ba012d0000210a41b9012d0000210b41b8012d0000210c41b7012d0000210d41b6012d0000210e41b5012d0000210f41b4012d0000211041b3012d0000211141b2012d0000211241b1012d0000211341b0012d0000211441af012d0000211541ae012d0000211641ad012d0000211741ac012d0000211841ab012d0000211941aa012d0000211a41a9012d0000211b41a8012d0000211c41a7012d0000211d41a6012d0000211e41a4012d0000211f200041a5012d00003a00012000201f3a00002000201e3a00022000201d3a00032000201c3a00042000201b3a00052000201a3a0006200020193a0007200020183a0008200020173a0009200020163a000a200020153a000b200020143a000c200020133a000d200020123a000e200020113a000f200020103a00102000200f3a00112000200e3a00122000200d3a00132000200c3a00142000200b3a00152000200a3a0016200020093a0017200020083a0018200020073a0019200020063a001a200020053a001b200020043a001c200020033a001d200020023a001e200020013a001f200041386a4200370300200042003703302000420037032820004200370320200041206a41202000412010031a0c040b4101410041001002000b4101410041001002000b4101410041241002000b4101410041241002000b41004100417f100841086a41001002000b4101413041241002000beb7a02277f187e230041206b22012400100a4198014180800236020041a001419801100541940141980128020022033602002001411036020c200141106a2001410c6a10062001290310212d200141186a290300212e230041206b2206240002400240024002400240027e200341034d0d0141900141a0012802002201360200024002400240024002400240024002400240024002400240024002400240200141b5ebfeaa024c0440200141c0bbce5c4c0440200141df97e3d07b460d052001418f89b6e87d470d12202d202e84500d060c120b200141c1bbce5c460d01200141a589fec100470d11202d202e84500d060c110b200141adb4f4eb044c0440200141b6ebfeaa02460d02200141fe948eb802470d11202d202e84500d070c110b200141aeb4f4eb04460d02200141f1caa1ea0547202d202e84420052720d10200641206b220324004198014120360200200641186a42003703002006420037031020064200370308200642003703002006412041a0014198011000210141a0012d0000210041a1012d0000210641a2012d0000210241a3012d0000210441a4012d0000210541a5012d0000210741a6012d0000210841a7012d0000210941a8012d0000210a41a9012d0000210b41aa012d0000210c41ab012d0000210d41ac012d0000210e41ad012d0000210f41ae012d0000211041af012d0000211141b0012d0000211241b1012d0000211341b2012d0000211441b3012d0000211541b4012d0000211641b5012d0000211741b6012d0000211841b7012d0000211941b8012d0000211a41b9012d0000211b41ba012d0000211c41bb012d0000211d41bc012d0000211e41bd012d0000211f41be012d000021202003410041bf012d000020011b3a001f20034100202020011b3a001e20034100201f20011b3a001d20034100201e20011b3a001c20034100201d20011b3a001b20034100201c20011b3a001a20034100201b20011b3a001920034100201a20011b3a001820034100201920011b3a001720034100201820011b3a001620034100201720011b3a001520034100201620011b3a001420034100201520011b3a001320034100201420011b3a001220034100201320011b3a001120034100201220011b3a001020034100201120011b3a000f20034100201020011b3a000e20034100200f20011b3a000d20034100200e20011b3a000c20034100200d20011b3a000b20034100200c20011b3a000a20034100200b20011b3a000920034100200a20011b3a000820034100200920011b3a000720034100200820011b3a000620034100200720011b3a000520034100200520011b3a000420034100200420011b3a000320034100200220011b3a000220034100200620011b3a000120034100200020011b3a00000c0c0b202d202e844200520d0f200641206b22032400200341206b22012400200141206b22002400230041206b220624004198014120360200200641186a42003703002006420037031020064200370308200642013703002006412041a0014198011000047e42000541b001290300213041a801290300213741a001290300212b41b8012903000b2131200641206b22022400200241186a420037030020024200370310200242003703082002420237030041980141203602002002412041a0014198011000047e42000541b001290300212c41a801290300213241a001290300212841b8012903000b2133200241206b22022400200241186a420037030020024200370310200242003703082002420337030041980141203602002002412041a0014198011000047e42000541b001290300212741a801290300212941a001290300212a41b8012903000b212f2003202b3703002003203737030820032030370310200341186a22022031370300200141186a2204203337030020012028370300200120323703082001202c37031020002027370310200041186a2205202f3703002000202a37030020002029370308200641206a2400200341086a2903002127200341106a290300212a20022903002128200141086a2903002129200141106a290300212b2004290300212c200041086a2903002131200041106a29030021332005290300212f20032903002134200129030021302000290300213241e000417f1008220341e0006a202f370300200341d8006a2033370300200341d0006a2031370300200341c8006a2032370300200341406b202c370300200341386a202b370300200341306a2029370300200341286a2030370300200341206a2028370300200341186a202a370300200341106a2027370300200341086a220320343703004100200341e0001002000b202d202e844200520d0e200341046b220120034b22002000720d102001411f4d0d0f2003200341046b2201490d10200141204d0d060c0f0b202d202e844200520d0d200341046b220120034b22002000720d0f2001411f4d0d0e2003200341046b2201490d0f200141204d0d060c0e0b202d202e844200520d0c200341046b220120034b22002000720d0e2001411f4d0d0d2003200341046b2201490d0e200141204d0d070c0d0b200641206b220324004198014120360200200641186a42003703002006420037031020064200370308200642033703002006412041a0014198011000047e42000541b801290300212a41a801290300212841a001290300212741b0012903000b2129200320273703002003202837030820032029370310200341186a2201202a370300200341106a290300212820012903002127200341086a2903000c0a0b200341046b220120034b22002000720d0c2001413f4b04402003200341046b2201490d0d200141c0004d0d020c0c0b0c0b0b200341046b220120034b22002000720d0b2001411f4b04402003200341046b2201490d0c200141204d0d040c0b0b0c0a0b41dc01290300212b41d401290300212c41cc01290300213141c401290300213341bc01290300212741b401290300212a41ac01290300212841a4012903002129200641206b22032400027f230041e0006b220124004198014120360200200141306a4200370300200142003703282001420037032020014200370318200141186a412041a0014198011000210041a0012d0000210441a1012d0000210541a2012d0000210741a3012d0000210841a4012d0000210941a5012d0000210a41a6012d0000210b41a7012d0000210c41a8012d0000210d41a9012d0000210e41aa012d0000210f41ab012d0000211041ac012d0000211141ad012d0000211241ae012d0000211341af012d0000211441b0012d0000211541b1012d0000211641b2012d0000211741b3012d0000211841b4012d0000211941b5012d0000211a41b6012d0000211b41b7012d0000211c41b8012d0000211d41b9012d0000211e41ba012d0000211f41bb012d0000212041bc012d0000212141bd012d0000212241be012d0000212341bf012d0000212441c400417f10082102200141a69fc7be7c36023c2001413c6a200241086a22251007200241c4006a202b3703002002413c6a202c370300200241346a20313703002002412c6a2033370300200241246a20273703002002411c6a202a370300200241146a20283703002002410c6a202937030020014100202420001b3a005f20014100202320001b3a005e20014100202220001b3a005d20014100202120001b3a005c20014100202020001b3a005b20014100201f20001b3a005a20014100201e20001b3a005920014100201d20001b3a005820014100201c20001b3a005720014100201b20001b3a005620014100201a20001b3a005520014100201920001b3a005420014100201820001b3a005320014100201720001b3a005220014100201620001b3a005120014100201520001b3a005020014100201420001b3a004f20014100201320001b3a004e20014100201220001b3a004d20014100201120001b3a004c20014100201020001b3a004b20014100200f20001b3a004a20014100200e20001b3a004920014100200d20001b3a004820014100200c20001b3a004720014100200b20001b3a004620014100200a20001b3a004520014100200920001b3a004420014100200820001b3a004320014100200720001b3a004220014100200520001b3a004120014100200420001b3a0040200228020021004198014180800236020020014200370310200142003703084100200141406b4200200141086a20252000410020021b41a00141980110012200044020004102460d0d0c0a0b41980128020041a00110082200280200410020001b2202411f4d0d0a41980128020041a00110082100200241204d0440200041206a290300212f200041186a2903002134200041106a2903002130200041086a290300213241e00010092202203037030820022032370300200241306a202c370300200241286a2031370300200241206a203337030020022034370310200241386a202b370300200241186a202f370300027e02402029202920327c222c5622002000ad202820307c7c222b2028542028202b511b2200202a20347c22292000ad7c2228202a542028202954ad2029202a54ad2027202f7c7c7c222920275420272029511b2028202a85202720298584501b450440200241c8006a202b370300200241406b2205202c370300200241d0006a2028370300200241d8006a2029370300200141206b220024004200212a200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a2004420037030020004200370310200042003703082000420237030020004120200241206a412010031a20044200370300200042003703102000420037030820004203370300200041202005412010031a200041206b2200240041e00010092102200041186a2204420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d0142002129420021274200212842000c020b0c0e0b41b801290300212841a801290300212741a001290300212941b0012903000b212b20022029370300200220273703082002202b370310200241186a2028370300419801412036020020004200370310200442003703002000420237030020004200370308027e2000412041a00141980110000440420021294200212742000c010b41b001290300212741a801290300212941a001290300212a41b8012903000b2128200241286a2029370300200241206a202a370300200241306a2027370300200241386a202837030041980141203602004200212a20004200370310200041186a42003703002000420337030020004200370308027e2000412041a00141980110000440420021294200212742000c010b41b001290300212741a801290300212941a001290300212a41b8012903000b2128200241c8006a2029370300200241406b202a370300200241d0006a2027370300200241d8006a20283703002002100d22000440200141e0006a240020000c020b419801412036020041a001419801100441a001290300212741a801290300212a41b0012903002128200341b801290300370018200320283700102003202a37000820032027370000200141e0006a240041000c010b0c0a0b450d040c050b41bc01290300212f41b401290300212c41ac01290300212d41a4012903002138200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b801290300212941a801290300213241a001290300213041b0012903000b212e200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300213141a801290300212841a001290300212741b8012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b001290300213441a801290300212b41a001290300213341b8012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f10082102200141eba490d40736022c2001412c6a200241086a2226100720024184016a202f370300200241fc006a202c370300200241f4006a202d370300200241ec006a2038370300200241e4006a2035370300200241dc006a2034370300200241d4006a202b370300200241cc006a2033370300200241c4006a20363703002002413c6a2031370300200241346a20283703002002412c6a2027370300200241246a20293703002002411c6a202e370300200241146a20323703002002410c6a203037030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d0c0c090b41980128020041a00110082202280200410020021b2204411f4d0d0941980128020041a00110082102200441204b0d094200212b0240027e0240202f200241206a290300223085202f202f20307d202c200241186a290300223254ad7d202c20327d22272038200241086a290300222e542204202d200241106a290300222c54202c202d511bad223354ad7d223585834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021294200212842000c020b0c020b41b801290300212841a801290300212941a001290300212b41b0012903000b2139202d202c7d2004ad200041206b2200240042002134200041186a42003703002000420037031020004200370308200042023703004198014120360200027e2000412041a001419801100004404200213142000c010b41b001290300212a41a801290300213141a001290300213741b8012903000b212f202720337d213a7d21362038202e7d2138200041206b22002400200041186a42003703002000420037031020004200370308200042033703004198014120360200027e2000412041a00141980110000440420021334200212742000c010b41b801290300212741a801290300213341a001290300213441b0012903000b212d41e0001009210220282035852028202820357d2039203a54ad7d2039203a7d2235202b2038542204202920365420292036511bad223954ad7d223a85834200530d002002202b20387d3703002002202920367d2004ad7d3703082002203520397d370310200241186a203a3703002037202e20377c22385622042004ad202c20317c7c222b203154202b2031511b2204202a20327c22292004ad7c2228202a542028202954ad2029202a54ad202f20307c7c7c2229202f542029202f511b2028202a852029202f8584501b0d00200241286a202b370300200241206a22052038370300200241306a2028370300200241386a2029370300027e0240202e20347c222b20345422042004ad202c20337c7c222920335420292033511b2204202d20327c22282004ad7c222a202d542028202a56ad2028202d54ad202720307c7c7c222820275420272028511b202a202d85202720288584501b450440200241c8006a2029370300200241406b2207202b370300200241d0006a202a370300200241d8006a2028370300200041206b220024004200212a200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a2204420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d0142002128420021274200212942000c020b0c020b41b801290300212941b001290300212741a001290300212841a8012903000b212b200220283703002002202b37030820022027370310200241186a2029370300419801412036020020004200370310200442003703002000420237030020004200370308027e2000412041a00141980110000440420021284200212742000c010b41b801290300212741a801290300212841a001290300212a41b0012903000b2129200241286a2028370300200241206a202a370300200241306a2029370300200241386a202737030041980141203602004200212a20004200370310200041186a42003703002000420337030020004200370308027e2000412041a00141980110000440420021284200212742000c010b41b801290300212741a801290300212841a001290300212a41b0012903000b2129200241c8006a2028370300200241406b202a370300200241d0006a2029370300200241d8006a20273703002002100d22000440200141d0006a240020000c020b2003202e3703002003202c37030820032032370310200341186a2030370300200141d0006a240041000c010b0c0a0b450d050c040b41bc01290300213741b401290300212d41ac01290300213441a401290300212e200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b001290300212741a801290300212f41a001290300212c41b8012903000b2138200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300212a41a801290300213041a001290300212b41b8012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b801290300212841a801290300213241a001290300212941b0012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f10082102200141e587b1c37936022c2001412c6a200241086a2226100720024184016a2037370300200241fc006a202d370300200241f4006a2034370300200241ec006a202e370300200241e4006a2028370300200241dc006a2035370300200241d4006a2032370300200241cc006a2029370300200241c4006a20363703002002413c6a202a370300200241346a20303703002002412c6a202b370300200241246a20383703002002411c6a2027370300200241146a202f3703002002410c6a202c37030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d0b0c080b41980128020041a00110082202280200410020021b2204411f4d0d0841980128020041a00110082102200441204b0d08420021280240027e0240200241206a29030022322037852032203220377d200241186a2903002239202d54ad7d2039202d7d222c200241086a290300223a202e542204200241106a290300223820345420342038511bad223054ad7d223b85834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d014200212942000c020b0c020b41b801290300212941a801290300213341a001290300212841b0012903000b213c2004ad2135200041206b220024004200212a200041186a42003703002000420037031020004200370308200042023703004198014120360200027e2000412041a001419801100004404200212b4200212f4200212742000c010b41b801290300212741b001290300212f41a801290300212b41a0012903000b2136202c20307d213d203820347d20357d2135203a202e7d213e200041206b22002400200041186a42003703002000420037031020004200370308200042033703004198014120360200027e2000412041a001419801100004404200212c42000c010b41b001290300213141a801290300212c41a001290300212a41b8012903000b213041e000100921022029203b8520292029203b7d203c203d54ad7d203c203d7d223b2028203e542204203320355420332035511bad223c54ad7d223d85834200530d0020022028203e7d3703002002203320357d2004ad7d3703082002203b203c7d370310200241186a203d3703002036202e7d2233203656202b20347d202e2036562204ad7d2229202b562029202b511b202f202d7d22282004202b203454202b2034511bad22367d222b202f56202720377d202d202f56ad7d2028203654ad7d222820275620272028511b202b202f85202720288584501b0d00200241286a2029370300200241206a22052033370300200241306a202b370300200241386a2028370300027e0240202a202e7d2229202a56202c20347d202a202e542204ad7d222a202c56202a202c511b2031202d7d22272004202c203454202c2034511bad222b7d2228203156203020377d202d203156ad7d2027202b54ad7d222720305620272030511b2028203185202720308584501b450440200241c8006a202a370300200241406b22072029370300200241d0006a2028370300200241d8006a2027370300200041206b2200240042002128200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a2204420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021274200212a4200212b42000c020b0c020b41b801290300212b41b001290300212a41a001290300212741a8012903000b212920022027370300200220293703082002202a370310200241186a202b370300419801412036020020004200370310200442003703002000420237030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b801290300212a41a801290300212741a001290300212841b0012903000b2129200241286a2027370300200241206a2028370300200241306a2029370300200241386a202a37030041980141203602004200212820004200370310200041186a42003703002000420337030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b801290300212a41a801290300212741a001290300212841b0012903000b2129200241c8006a2027370300200241406b2028370300200241d0006a2029370300200241d8006a202a3703002002100d22000440200141d0006a240020000c020b2003203a3703002003203837030820032039370310200341186a2032370300200141d0006a240041000c010b0c090b450d040c030b41bc01290300213141b401290300213341ac01290300212841a401290300212d200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b001290300212741a801290300212f41a001290300212c41b8012903000b212e200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300212a41a801290300213741a001290300212b41b8012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b801290300213241a801290300212941a001290300213041b0012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f10082102200141b8f9f2910636022c2001412c6a200241086a2226100720024184016a2031370300200241fc006a2033370300200241f4006a2028370300200241ec006a202d370300200241e4006a2032370300200241dc006a2035370300200241d4006a2029370300200241cc006a2030370300200241c4006a20363703002002413c6a202a370300200241346a20373703002002412c6a202b370300200241246a202e3703002002411c6a2027370300200241146a202f3703002002410c6a202c37030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d0a0c070b41980128020041a00110082202280200410020021b2204411f4d0d0741980128020041a00110082102200441204b0d074200212a0240027e0240200241206a29030022302031852030203020317d200241186a2903002236203354ad7d203620337d222b200241086a2903002235202d542204200241106a290300223220285420282032511bad222c54ad7d223985834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d014200212f4200212742000c020b0c020b41b801290300212741a801290300212f41a001290300212a41b0012903000b213a2004ad212e200041206b2200240042002129200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300213d41a801290300213841a001290300213441b8012903000b213e202b202c7d213b203220287d202e7d212e2035202d7d213c200041206b22002400200041186a42003703002000420037031020004200370308200042033703004198014120360200027e2000412041a001419801100004404200212b4200212c42000c010b41b801290300212c41b001290300212b41a001290300212941a8012903000b213741e0001009210220272039852027202720397d203a203b54ad7d203a203b7d2239202a203c542204202e202f56202e202f511bad223a54ad7d223b85834200530d002002202a203c7d370300200241286a2038370300200241206a220520343703002002202f202e7d2004ad7d370308200241306a203d37030020022039203a7d370310200241386a203e370300200241186a203b370300027e024020292029202d7c22295622042004ad202820377c7c222820375420282037511b2204202b20337c222a2004ad7c2227202b542027202a54ad202a202b54ad202c20317c7c7c222a202c54202a202c511b2027202b85202a202c8584501b450440200241c8006a2028370300200241406b22072029370300200241d0006a2027370300200241d8006a202a370300200041206b2200240042002128200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021274200212a4200212b42000c020b0c020b41b801290300212b41a801290300212a41a001290300212741b0012903000b2129200220273703002002202a37030820022029370310200241186a202b370300419801412036020020004200370310200041186a220442003703002000420237030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b001290300212a41a801290300212741a001290300212841b8012903000b2129200241286a2027370300200241206a2028370300200241306a202a370300200241386a202937030041980141203602004200212820004200370310200442003703002000420337030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b001290300212a41a801290300212741a001290300212841b8012903000b2129200241c8006a2027370300200241406b2028370300200241d0006a202a370300200241d8006a20293703002002100d22000440200141d0006a240020000c020b200320353703002003203237030820032036370310200341186a2030370300200141d0006a240041000c010b0c080b450d030c020b41bc01290300212b41b401290300212d41ac01290300212c41a401290300212e200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b801290300212841b001290300212741a001290300213841a8012903000b212f200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b801290300213341a801290300213141a001290300213441b0012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b001290300213741a801290300213241a001290300213041b8012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f100821022001418f84aaa77836022c2001412c6a200241086a2226100720024184016a202b370300200241fc006a202d370300200241f4006a202c370300200241ec006a202e370300200241e4006a2035370300200241dc006a2037370300200241d4006a2032370300200241cc006a2030370300200241c4006a20333703002002413c6a2036370300200241346a20313703002002412c6a2034370300200241246a20283703002002411c6a2027370300200241146a202f3703002002410c6a203837030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d090c060b41980128020041a00110082202280200410020021b2204411f4d0d0641980128020041a00110082102200441204b0d06420021330240027e0240200241206a290300222f202b85202f202f202b7d200241186a2903002230202d54ad7d2030202d7d222d200241086a2903002232202e542204200241106a290300222b202c54202b202c511bad223754ad7d223685834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021284200213142000c020b0c020b41b801290300213141a801290300212841a001290300213341b0012903000b2135202b202c7d2004ad200041206b2200240042002127200041186a42003703002000420037031020004200370308200042023703004198014120360200027e2000412041a0014198011000044042002134420021384200212c42000c010b41b001290300212c41a801290300213841a001290300213441b8012903000b213b202d20377d21397d21372032202e7d212e200041206b22002400200041186a420037030020004200370310200042003703082000420337030041980141203602002000412041a0014198011000047e42000541b001290300212a41a801290300212941a001290300212741b8012903000b212d41e0001009210220312036852031203120367d2035203954ad7d203520397d2236202e2033562204202820375420282037511bad223554ad7d223985834200530d0020022033202e7d370300200241286a2038370300200241206a220520343703002002202820377d2004ad7d370308200241306a202c3703002002203620357d370310200241386a203b370300200241186a2039370300027e0240202720327d222c2027562029202b7d20272032542204ad7d222820295620282029511b202a20307d222720042029202b542029202b511bad22317d2229202a56202d202f7d202a203054ad7d2027203154ad7d2227202d562027202d511b2029202a852027202d8584501b450440200241c8006a2028370300200241406b2207202c370300200241d0006a2029370300200241d8006a2027370300200041206b2200240042002129200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d014200212a420021274200212842000c020b0c020b41b801290300212841b001290300212741a001290300212a41a8012903000b212c2002202a3703002002202c37030820022027370310200241186a2028370300419801412036020020004200370310200041186a220442003703002000420237030020004200370308027e2000412041a001419801100004404200212a4200212742000c010b41b801290300212741a801290300212a41a001290300212941b0012903000b2128200241286a202a370300200241206a2029370300200241306a2028370300200241386a202737030041980141203602004200212920004200370310200442003703002000420337030020004200370308027e2000412041a001419801100004404200212a4200212742000c010b41b801290300212741a801290300212a41a001290300212941b0012903000b2128200241c8006a202a370300200241406b2029370300200241d0006a2028370300200241d8006a20273703002002100d22000440200141d0006a240020000c020b200320323703002003202b37030820032030370310200341186a202f370300200141d0006a240041000c010b0c070b450d020c010b200329000021272003290008212a20032900102128200329001821294120417f1008220341206a2029370000200341186a2028370000200341106a202a370000200341086a220320273700004100200341201002000b200641206a24000c060b200341106a2903002128200341186a2903002127200341086a2903000b212a200329030021294120417f1008220341206a2027370300200341186a2028370300200341106a202a370300200341086a220320293703004100200341201002000b4101410041001002000b4101410041241002000b4101413041241002000b410141980128020041a0011008220341086a2003280200410020031b1002000b000b0b2e040041000b044e487b710041300b054e487b71110041e0000b054e487b7112004184010b0908c379a0104f686f68008e010970726f64756365727302086c616e6775616765010143000c70726f6365737365642d62790105636c616e676131352e302e34202868747470733a2f2f6769746875622e636f6d2f736f6c616e612d6c6162732f6c6c766d2d70726f6a6563742e676974203333633336323963616135396235396438663538353733366134613531393461613965393337376429" - }, - "spec": { - "constructors": [ - { - "args": [ - { - "label": "_curve", - "type": { - "displayName": [ - "ink_primitives", - "types", - "AccountId" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "new", - "payable": false, - "returnType": null, - "selector": "0xc24325ba" - } - ], - "docs": [ - "Stateful mock AMM to test the slippage curve." - ], - "environment": { - "accountId": { - "displayName": [ - "AccountId" - ], - "type": 2 - }, - "balance": { - "displayName": [ - "Balance" - ], - "type": 6 - }, - "blockNumber": { - "displayName": [ - "BlockNumber" - ], - "type": 7 - }, - "chainExtension": { - "displayName": [], - "type": 0 - }, - "hash": { - "displayName": [ - "Hash" - ], - "type": 8 - }, - "maxEventTopics": 4, - "timestamp": { - "displayName": [ - "Timestamp" - ], - "type": 7 - } - }, - "events": [], - "lang_error": { - "displayName": [ - "SolidityError" - ], - "type": 12 - }, - "messages": [ - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "curve", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink_primitives", - "types", - "AccountId" - ], - "type": 2 - }, - "selector": "0x7165485d" - }, - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "state", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "VendingMachine", - "state", - "return_type" - ], - "type": 5 - }, - "selector": "0xc19d93fb" - }, - { - "args": [ - { - "label": "_reserves", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - }, - { - "label": "_liabilities", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "init", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink_primitives", - "types", - "AccountId" - ], - "type": 2 - }, - "selector": "0xa5843f08" - }, - { - "args": [ - { - "label": "_amount", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "deposit", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0xb6b55f25" - }, - { - "args": [ - { - "label": "_liabilities", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "withdraw", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0x2e1a7d4d" - }, - { - "args": [ - { - "label": "_amount", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "swapInto", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0x7e8a0327" - }, - { - "args": [ - { - "label": "_amount", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "swapOutOf", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0xdfcb18ba" - }, - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "totalReserves", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0x8f840ddd" - } - ] - }, - "storage": { - "struct": { - "fields": [ - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 1 - } - }, - "name": "" - } - ], - "name": "AccountId" - } - }, - "root_key": "0x00000000" - } - }, - "name": "curve" - }, - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x00000001", - "ty": 3 - } - }, - "name": "accumulatedSlippage" - }, - { - "layout": { - "leaf": { - "key": "0x00000001", - "ty": 3 - } - }, - "name": "liabilities" - }, - { - "layout": { - "leaf": { - "key": "0x00000001", - "ty": 3 - } - }, - "name": "reserves" - } - ], - "name": "State" - } - }, - "root_key": "0x00000001" - } - }, - "name": "state" - } - ], - "name": "VendingMachine" - } - }, - "types": [ - { - "id": 0, - "type": { - "def": { - "primitive": "u8" - }, - "path": [ - "uint8" - ] - } - }, - { - "id": 1, - "type": { - "def": { - "array": { - "len": 32, - "type": 0 - } - } - } - }, - { - "id": 2, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 1 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "AccountId" - ] - } - }, - { - "id": 3, - "type": { - "def": { - "primitive": "u256" - }, - "path": [ - "uint256" - ] - } - }, - { - "id": 4, - "type": { - "def": { - "composite": { - "fields": [ - { - "name": "accumulatedSlippage", - "type": 3 - }, - { - "name": "liabilities", - "type": 3 - }, - { - "name": "reserves", - "type": 3 - } - ] - } - }, - "path": [ - "State" - ] - } - }, - { - "id": 5, - "type": { - "def": { - "tuple": [ - 3, - 3, - 3 - ] - }, - "path": [ - "VendingMachine", - "state", - "return_type" - ] - } - }, - { - "id": 6, - "type": { - "def": { - "primitive": "u128" - }, - "path": [ - "uint128" - ] - } - }, - { - "id": 7, - "type": { - "def": { - "primitive": "u64" - }, - "path": [ - "uint64" - ] - } - }, - { - "id": 8, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 1 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "Hash" - ] - } - }, - { - "id": 9, - "type": { - "def": { - "primitive": "str" - }, - "path": [ - "string" - ] - } - }, - { - "id": 10, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 9 - } - ] - } - }, - "path": [ - "0x08c379a0" - ] - } - }, - { - "id": 11, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 3 - } - ] - } - }, - "path": [ - "0x4e487b71" - ] - } - }, - { - "id": 12, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 10 - } - ], - "index": 0, - "name": "Error" - }, - { - "fields": [ - { - "type": 11 - } - ], - "index": 1, - "name": "Panic" - } - ] - } - }, - "path": [ - "SolidityError" - ] - } - } - ], - "version": "4" -} \ No newline at end of file diff --git a/nabla-pendulum/_lib.ts b/nabla-pendulum/_lib.ts deleted file mode 100644 index ad9d4dc..0000000 --- a/nabla-pendulum/_lib.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { DeploymentsExtension, Network, TxOptions } from "../src/index"; - -export function isTestnet(network: Network) { - return ["foucoco", "local"].includes(network.name.toLowerCase()); -} - -export async function registerAsset( - deployments: DeploymentsExtension, - tx: TxOptions, - tokenAddr: string, - oracleAddr: string -) { - return await deployments.execute("router", tx, "setPriceOracle", tokenAddr, oracleAddr); -} - -export async function registerSwapPool( - deployments: DeploymentsExtension, - tx: TxOptions, - tokenAddr: string, - swapPoolAddr: string, - insuranceFeeBps: number = 0 -) { - const registerWithRouter = await deployments.execute("router", tx, "registerPool", tokenAddr, swapPoolAddr); - const registerWithBackstop = await deployments.execute("backstop", tx, "addSwapPool", swapPoolAddr, insuranceFeeBps); - - return [registerWithRouter, registerWithBackstop]; -} - -export async function setSwapFees( - deployments: DeploymentsExtension, - tx: TxOptions, - /// Deployment name - swapPool: string, - /// in 1/100 of basis points (0.0001%) - lpFee: number, - /// in 1/100 of basis points (0.0001%) - backstopFee: number, - /// in 1/100 of basis points (0.0001%) - protocolFee: number -) { - return await deployments.execute(swapPool, tx, "setSwapFees", lpFee, backstopFee, protocolFee); -} - -export async function setInsuranceWithdrawalTimelock( - deployments: DeploymentsExtension, - tx: TxOptions, - /// Deployment name - swapPool: string, - /// timelock in blocks - blocks: number -) { - return await deployments.execute(swapPool, tx, "setInsuranceWithdrawalTimelock", blocks); -} - -export async function setPoolCap( - deployments: DeploymentsExtension, - tx: TxOptions, - /// Deployment name - pool: string, - /// timelock in blocks - maxTokens: bigint -) { - return await deployments.execute(pool, tx, "setPoolCap", maxTokens); -} - -export async function setMaxCoverageRatio( - deployments: DeploymentsExtension, - tx: TxOptions, - /// Deployment name - pool: string, - /// timelock in blocks - maxCoverageRatio: bigint -) { - return await deployments.execute(pool, tx, "setMaxCoverageRatioForSwapIn", maxCoverageRatio); -} - -// A quick hack to hopefully not crash the deployment procedure anymore after the -// last actual deploy script has been executed. -function NoOp() { - // Do nothing -} - -NoOp.skip = () => Promise.resolve(true); - -export default NoOp; diff --git a/nabla-pendulum/config.json b/nabla-pendulum/config.json deleted file mode 100644 index db6669f..0000000 --- a/nabla-pendulum/config.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "contracts": { - "Router": { - "repository": "nablaContracts", - "path": "contracts/src/core/Router.sol", - "argumentNameOverwrites": { - "oracleByAsset": ["asset"], - "poolByAsset": ["asset"] - } - }, - "NablaCurve": { - "repository": "nablaCurve", - "path": "src/NablaCurve.sol" - }, - "BackstopPool": { - "repository": "nablaContracts", - "path": "contracts/src/core/BackstopPool.sol", - "messageNameOverwrites": { - "decimals_": "decimals" - } - }, - "SwapPool": { - "repository": "nablaContracts", - "path": "contracts/src/core/SwapPool.sol", - "messageNameOverwrites": { - "decimals_": "decimals" - } - }, - "ERC20Wrapper": { - "repository": "pendulumWrappers", - "path": "erc20-wrapper/ERC20Wrapper.sol", - "mutatingOverwrites": { - "balanceOf": false, - "totalSupply": false, - "allowance": false - }, - "messageNameOverwrites": { - "name_": "name", - "symbol_": "symbol", - "decimals_": "decimals", - "variant_": "variant", - "index_": "index", - "code_": "code", - "issuer_": "issuer" - } - }, - "PriceOracleWrapper": { - "repository": "pendulumWrappers", - "path": "price-oracle-wrapper/PriceOracleWrapper.sol", - "mutatingOverwrites": { - "getAssetPrice": false, - "getAnyAssetSupply": false, - "getAnyAssetLastUpdateTimestamp": false, - "getAnyAssetPrice": false, - "getAnyAsset": false - } - } - }, - "repositories": { - "nablaContracts": { - "git": "https://github.com/NablaFinance/contracts.git", - "branch": "pendulum-launch", - "init": "yarn", - "importpaths": ["contracts/@chain/pendulum", "node_modules"] - }, - "nablaCurve": { - "git": "https://github.com/NablaFinance/curve.git", - "branch": "main", - "init": "npm" - }, - "pendulumWrappers": { - "git": "https://github.com/pendulum-chain/pendulum-solidity-wrapper", - "branch": "master" - } - }, - "networks": { - "pendulum": { - "namedAccounts": { - "deployer": "6brtrQNiDYnte7oan4y3UUCJ3Ci9sK8k5cGjiHwKdVnz9KZ2" - }, - "rpcUrl": "wss://rpc-pendulum.prd.pendulumchain.tech:443" - }, - "foucoco": { - "namedAccounts": { - "deployer": "6iFKMtX29zYoHRgDkPTXKuRsHRbJ3Gnaxyc4dRrZTANHvZi3" - }, - "rpcUrl": "wss://rpc-foucoco.pendulumchain.tech:443" - }, - "local": { - "namedAccounts": { - "deployer": { - "address": "6mfqoTMHrMeVMyKwjqomUjVomPMJ4AjdCm1VReFtk7Be8wqr", - "suri": "//Alice" - } - }, - "rpcUrl": "ws://127.0.0.1:9944" - } - }, - "buildFolder": "../target-pendulum", - "limits": { - "gas": { - "refTime": "10000000000000000", - "proofSize": "10000000000000000" - }, - "storageDeposit": "2300000000000" - } -} diff --git a/nabla-pendulum/deploy/01_deploy_router.ts b/nabla-pendulum/deploy/01_deploy_router.ts deleted file mode 100644 index a906587..0000000 --- a/nabla-pendulum/deploy/01_deploy_router.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { WasmDeployEnvironment } from "../../src/index"; -import { selectDeployment } from "../deployments/selector"; - -async function DeployRouter({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); - - // just check early that deploymentName is valid - selectDeployment(deploymentName, deployer.accountId); - - await deployments.deploy("router", { - from: deployer, - contract: "Router", - args: [], - log: true, - }); -} - -DeployRouter.tags = ["router"]; - -// eslint-disable-next-line @typescript-eslint/require-await -DeployRouter.skip = async function skip(_: WasmDeployEnvironment): Promise { - // the skip feature is not implemented yet in wasm-deploy - return false; -}; - -export default DeployRouter; diff --git a/nabla-pendulum/deploy/02_deploy_token_wrappers.ts b/nabla-pendulum/deploy/02_deploy_token_wrappers.ts deleted file mode 100644 index c85ee42..0000000 --- a/nabla-pendulum/deploy/02_deploy_token_wrappers.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { WasmDeployEnvironment } from "../../src/index"; -import { selectDeployment } from "../deployments/selector"; - -async function DeployTokenWrappers({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); - - const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); - - for (const tokenEntry of Object.entries(deploymentDescription.tokens)) { - const [tokenName, tokenDescription] = tokenEntry; - const { name, symbol, decimals, variant, index, code, issuer } = tokenDescription; - - await deployments.deploy(`${tokenName}Erc20Wrapper`, { - from: deployer, - contract: "ERC20Wrapper", - args: [name, symbol, decimals, variant, index, code, issuer], - log: true, - }); - } -} - -DeployTokenWrappers.tags = ["tokens"]; - -// eslint-disable-next-line @typescript-eslint/require-await -DeployTokenWrappers.skip = async function skip(_: WasmDeployEnvironment): Promise { - // the skip feature is not implemented yet in wasm-deploy - return false; -}; - -export default DeployTokenWrappers; diff --git a/nabla-pendulum/deploy/03_deploy_oracle_wrappers.ts b/nabla-pendulum/deploy/03_deploy_oracle_wrappers.ts deleted file mode 100644 index 7ef5bd5..0000000 --- a/nabla-pendulum/deploy/03_deploy_oracle_wrappers.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { WasmDeployEnvironment } from "../../src/index"; -import { registerAsset } from "../_lib"; - -import { selectDeployment } from "../deployments/selector"; - -async function DeployOracleWrappers({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); - - const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); - - const tokens = Object.entries(deploymentDescription.tokens); - - const tokenDeployments = await Promise.all( - tokens.map(async ([tokenName, _]) => deployments.get(`${tokenName}Erc20Wrapper`)) - ); - - const priceFeedWrapper = await deployments.deploy("priceFeedWrapper", { - from: deployer, - contract: "PriceOracleWrapper", - args: [ - tokens.map(([_, tokenDescription], index) => ({ - asset: tokenDeployments[index].address, - blockchain: tokenDescription.oracleBlockchain, - symbol: tokenDescription.oracleSymbol, - })), - ], - log: true, - }); - - for (const tokenDeployment of tokenDeployments) { - await registerAsset(deployments, { from: deployer, log: true }, tokenDeployment.address, priceFeedWrapper.address); - } -} - -DeployOracleWrappers.tags = ["oracles"]; - -// eslint-disable-next-line @typescript-eslint/require-await -DeployOracleWrappers.skip = async function skip(_: WasmDeployEnvironment): Promise { - // the skip feature is not implemented yet in wasm-deploy - return false; -}; - -export default DeployOracleWrappers; diff --git a/nabla-pendulum/deploy/04_deploy_curves.ts b/nabla-pendulum/deploy/04_deploy_curves.ts deleted file mode 100644 index 4ce08da..0000000 --- a/nabla-pendulum/deploy/04_deploy_curves.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { WasmDeployEnvironment } from "../../src/index"; -import { selectDeployment } from "../deployments/selector"; - -async function DeployCurves({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); - - const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); - - for (const curveEntries of Object.entries(deploymentDescription.curves)) { - const [curveName, curveDescription] = curveEntries; - - const rawAlpha = BigInt(Math.round(curveDescription.alpha * 1e9)) * 10n ** 9n; - const rawBeta = BigInt(Math.round(curveDescription.beta * 1e9)) * 10n ** 9n; - - await deployments.deploy(`curve-${curveName}`, { - from: deployer, - contract: "NablaCurve", - args: [rawAlpha, rawBeta], - log: true, - }); - } -} - -DeployCurves.tags = ["curves"]; - -// eslint-disable-next-line @typescript-eslint/require-await -DeployCurves.skip = async function skip(_: WasmDeployEnvironment): Promise { - // the skip feature is not implemented yet in wasm-deploy - return false; -}; - -export default DeployCurves; diff --git a/nabla-pendulum/deploy/05_deploy_backstop.ts b/nabla-pendulum/deploy/05_deploy_backstop.ts deleted file mode 100644 index 8c89080..0000000 --- a/nabla-pendulum/deploy/05_deploy_backstop.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { WasmDeployEnvironment } from "../../src/index"; -import { setPoolCap } from "../_lib"; - -import { selectDeployment } from "../deployments/selector"; - -async function DeployBackstopPool({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); - - const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); - - const backstopDescription = deploymentDescription.backstop; - const poolTokenDescription = deploymentDescription.tokens[backstopDescription.token]; - - const [router, backstopPoolToken] = await Promise.all([ - deployments.get("router"), - deployments.get(`${backstopDescription.token}Erc20Wrapper`), - ]); - - await deployments.deploy("backstop", { - from: deployer, - contract: "BackstopPool", - args: [ - router.address, - backstopPoolToken.address, - backstopDescription.lpTokenName, - backstopDescription.lpTokenSymbol, - ], - log: true, - }); - - const rawPoolCap = BigInt(backstopDescription.poolCapUnits) * 10n ** BigInt(poolTokenDescription.decimals); - await setPoolCap(deployments, { from: deployer, log: true }, "backstop", rawPoolCap); -} - -DeployBackstopPool.tags = ["backstop"]; - -// eslint-disable-next-line @typescript-eslint/require-await -DeployBackstopPool.skip = async function skip(_: WasmDeployEnvironment): Promise { - // the skip feature is not implemented yet in wasm-deploy - return false; -}; - -export default DeployBackstopPool; diff --git a/nabla-pendulum/deploy/06_deploy_swap_pools.ts b/nabla-pendulum/deploy/06_deploy_swap_pools.ts deleted file mode 100644 index c045075..0000000 --- a/nabla-pendulum/deploy/06_deploy_swap_pools.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { WasmDeployEnvironment } from "../../src/index"; -import { - registerSwapPool, - setSwapFees, - setInsuranceWithdrawalTimelock, - setPoolCap, - setMaxCoverageRatio, -} from "../_lib"; - -import { selectDeployment } from "../deployments/selector"; - -async function DeploySwapPools({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); - - const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); - - const tokens = Object.entries(deploymentDescription.tokens); - const curves = Object.entries(deploymentDescription.curves); - - const [backstop, router, curveDeployments, tokenDeployments] = await Promise.all([ - deployments.get("backstop"), - deployments.get("router"), - Promise.all(curves.map(async ([curveName, _]) => deployments.get(`curve-${curveName}`))), - Promise.all(tokens.map(async ([tokenName, _]) => deployments.get(`${tokenName}Erc20Wrapper`))), - ]); - - for (const swapPoolEntry of Object.entries(deploymentDescription.swapPools)) { - const [token, poolDescription] = swapPoolEntry; - const { - curve, - treasuryAccount, - lpTokenName, - lpTokenSymbol, - insuranceFeeBasisPoints, - lpFeeBasisPoints, - backstopFeeBasisPoints, - protocolFeeBasisPoints, - insuranceWithdrawalTimelock, - poolCapUnits, - maxCoverageRatioPercent, - } = poolDescription; - - const tokenIndex = tokens.findIndex(([tokenName, _]) => tokenName === token); - const tokenDeployment = tokenDeployments[tokenIndex]; - - const curveIndex = curves.findIndex(([curveName, _]) => curveName === curve); - const curveDeployment = curveDeployments[curveIndex]; - - const poolTokenDescription = deploymentDescription.tokens[token]; - - const deploymentName = `swap-${token}`; - - const poolDeployment = await deployments.deploy(deploymentName, { - from: deployer, - contract: "SwapPool", - args: [ - tokenDeployment.address, - curveDeployment.address, - router.address, - backstop.address, - treasuryAccount, - lpTokenName, - lpTokenSymbol, - ], - log: true, - }); - - await registerSwapPool( - deployments, - { from: deployer, log: true }, - tokenDeployment.address, - poolDeployment.address, - insuranceFeeBasisPoints - ); - - const rawLpFee = Math.round(lpFeeBasisPoints * 100); - const rawBackstopFee = Math.round(backstopFeeBasisPoints * 100); - const rawProtocolFee = Math.round(protocolFeeBasisPoints * 100); - await setSwapFees( - deployments, - { from: deployer, log: true }, - deploymentName, - rawLpFee, - rawBackstopFee, - rawProtocolFee - ); - - await setInsuranceWithdrawalTimelock( - deployments, - { from: deployer, log: true }, - deploymentName, - insuranceWithdrawalTimelock - ); - - const rawPoolCap = BigInt(poolCapUnits) * 10n ** BigInt(poolTokenDescription.decimals); - await setPoolCap(deployments, { from: deployer, log: true }, deploymentName, rawPoolCap); - - await setMaxCoverageRatio( - deployments, - { from: deployer, log: true }, - deploymentName, - BigInt(maxCoverageRatioPercent) - ); - } -} - -DeploySwapPools.tags = ["swap-pools"]; - -// eslint-disable-next-line @typescript-eslint/require-await -DeploySwapPools.skip = async function skip(_: WasmDeployEnvironment): Promise { - // the skip feature is not implemented yet in wasm-deploy - return false; -}; - -export default DeploySwapPools; diff --git a/nabla/NablaCurve.contract b/nabla/NablaCurve.contract deleted file mode 100644 index acb4bf0..0000000 --- a/nabla/NablaCurve.contract +++ /dev/null @@ -1,635 +0,0 @@ -{ - "contract": { - "authors": [ - "unknown" - ], - "description": "implementation of the Nabla slippage curve", - "name": "NablaCurve", - "version": "0.0.1" - }, - "source": { - "compiler": "solang 0.3.2", - "hash": "0x0450cfdb41fcb421ef6f82b14cf77ba28a1dc3dd2b1cbb9f64c186e2d9a7fa40", - "language": "Solidity 0.3.2", - "wasm": "0x0061736d0100000001400960097e7e7e7e7e7e7e7e7f017f60047f7f7f7f017f60000060057e7e7e7e7f017f60027f7f0060017f017f60047f7e7e7f0060037f7f7f0060037f7f7f017f027406057365616c300b7365616c5f72657475726e0007057365616c310b6765745f73746f726167650001057365616c320b7365745f73746f726167650001057365616c3005696e7075740004057365616c301176616c75655f7472616e73666572726564000403656e76066d656d6f7279020110100313120505020806060101000003000003030002020608017f01418080040b071102066465706c6f7900150463616c6c00160a96d001127b01047f2000220141086a10062202200136020420022001360200200241086a210002402001450d00200141016b2001410771220304400340200041003a0000200041016a2100200141016b2101200341016b22030d000b0b4107490d00034020004200370000200041086a2100200141086b22010d000b0b20020b950101047f41808004210103400240200128020c0d00200128020822022000490d002002200041076a41787122026b220441184f0440200120026a41106a22002001280200220336020020030440200320003602040b2000200441106b3602082000410036020c2000200136020420012000360200200120023602080b2001410136020c200141106a0f0b200128020021010c000b000b2e00418080044100360200418480044100360200418c80044100360200418880043f00411074419080046b3602000bd102020a7f027e2000411c6a210441082103027f03404100200341004c0d011a200341016b21032004280200200441046b2104450d000b200341016a0b210b2001411c6a21044108210302400340200341004c0d01200341016b21032004280200200441046b2104450d000b200341016a21060b200141046b210c41002101410121074100210503402008200120064e6a21080240200520052006486a220520092001200b4e6a22094d04404200210e0c010b200520096b210a200020084102746a2103200c20054102746a21044200210e0340200e4280808080107c200e200d200d200435020020033502007e7c220d561b210e200341046a2103200441046b2104200a41016b220a0d000b0b0240024020014108480440200220014102746a200d3e02000c010b200d4200520d010b200141016a22014110482107200d422088200e84210d20014110470d010b0b20070b5001017e02402003450d00200341c00071044020012003413f71ad862102420021010c010b20022003ad220486200141c00020036bad88842102200120048621010b20002002370308200020013703000b5001017e02402003450d00200341c00071044020022003413f71ad882101420021020c010b200241c00020036bad8620012003ad220488842101200220048821020b20002002370308200020013703000ba51102197e047f230041f0006b221e2400200041186a2903002105200041106a2903002107200041086a290300210620002903002109027f02402001290300220e420156200141086a290300220c420052200c501b200141106a290300220f420052200141186a290300220a420052200a5022201b200a200f84501b4504404101200ea741016b0d021a200242003703102002420037030820024200370300200241186a4200370300200320073703102003200937030020032006370308200341186a20053703000c010b2007200f8522042009200e85842005200a8522082006200c858484500440200242003703102002420037030820024200370300200241186a420037030020034200370310200341186a420037030020034201370300200342003703080c010b200720098420052006848442002009200e5a2006200c5a2006200c511b2007200f5a2005200a5a2005200a511b2004200884501b1b500440200220093703002002200637030820022007370310200241186a200537030020034200370310200341186a420037030020034200370300200342003703080c010b41c0012100027f02402005220450221f450d004180012100200722044200520d0041c0002100200622044200520d004100220020092204500d011a0b2000411f413f20044280808080105422011b221d41106b201d2004422086200420011b220442808080808080c0005422011b221d41086b201d2004421086200420011b2204428080808080808080015422011b221d41046b201d2004420886200420011b2204428080808080808080105422011b221d41026b201d2004420486200420011b2204428080808080808080c0005422011b6a2004420286200420011b423f87a7417f736a0b210041c0012101200a2104201e41306a200e200c4180012000027f02402020450d004180012101200f22044200520d0041c0002101200c22044200520d0041002201200e2204500d011a0b2001411f413f20044280808080105422001b221d41106b201d2004422086200420001b220442808080808080c0005422001b221d41086b201d2004421086200420001b2204428080808080808080015422001b221d41046b201d2004420886200420001b2204428080808080808080105422001b221d41026b201d2004420486200420001b2204428080808080808080c0005422001b6a2004420286200420001b423f87a7417f736a0b6b22006b100a201e41e0006a200f200a20001009201e41406b200e200c20004180016b1009201e41d0006a200e200c2000100941c001210120052104201e41e8006a290300201e41386a29030084201e41c8006a290300200041800149221d1b200a20001b2110201e290360201e29033084201e290340201d1b200f20001b210d201e41d8006a2903004200201d1b2111201e2903504200201d1b211241c0012100200a2108201e41106a42014200027f0240201f450d004180012101200722044200520d0041c0002101200622044200520d004100220120092204500d011a0b2001411f413f200442808080801054221d1b221f41106b201f20044220862004201d1b220442808080808080c00054221d1b221f41086b201f20044210862004201d1b22044280808080808080800154221d1b221f41046b201f20044208862004201d1b22044280808080808080801054221d1b221f41026b201f20044204862004201d1b2204428080808080808080c00054221d1b6a20044202862004201d1b423f87a7417f736a0b027f02402020450d004180012100200f22084200520d0041c0002100200c22084200520d0041002200200e2208500d011a0b2000411f413f20084280808080105422011b221d41106b201d2008422086200820011b220442808080808080c0005422011b221d41086b201d2004421086200420011b2204428080808080808080015422011b221d41046b201d2004420886200420011b2204428080808080808080105422011b221d41026b201d2004420486200420011b2204428080808080808080c0005422011b6a2004420286200420011b423f87a7417f736a0b6b22004180016b1009201e4201420041800120006b100a201e41206a4201420020001009200d2009201254200620115420062011511b2007200d54200520105420052010511b2007200d85200520108584501b221dad220b882010420186201d413f73ad22048684210820114201862004862012200b88842112201e290300201e29031020004180014922011b420020001b2213200b88201e41086a290300201e41186a29030020011b420020001b2214420186200486842116201e41286a290300420020011b2215420186200486201e290320420020011b200b88842117200d420186201d417f73413f71ad2204862011200b8884210d20134201862004862015200b888421112010200b8821042014200b88210b4200211042002113420021144200211503404200200d20092012542006200d542006200d511b2007200854200420055620042005511b2007200885200420058584501b22001b21184200201220001b211a4200200420001b211b20074200200820001b22195421014200200b20001b20158421154200201620001b20148421144200201120001b20138421134200201720001b20108421102011423f862017420188842117200d423f8620124201888421122016423f8620114201888421112008423f86200d42018884210d200b423f8620164201888421162004423f862008420188842108200b420188210b20044201882104200720197d22192009201a542200200620185420062018511bad221c7d21072009201a7d2209200e5a200620187d2000ad7d2206200c5a2006200c511b2007200f5a2005201b7d2001ad7d2019201c54ad7d2205200a5a2005200a511b2007200f852005200a8584501b0d000b200320103703002003201337030820032014370310200341186a201537030020022007370310200241186a200537030020022009370300200220063703080b41000b201e41f0006a24000b8f0402037e047f20002c001f2209410048044020004200200029030022057d370300200041086a220742002007290300220420054200522207ad7c7d370300200041106a22084200200829030022057d2206200720044200522004501bad22047d370300200041186a220742002004200656ad20072903002005420052ad7c7c7d3703000b20012c001f2208410048044020014200200129030022057d370300200141086a220742002007290300220420054200522207ad7c7d370300200141106a220a4200200a29030022057d2206200720044200522004501bad22047d370300200141186a220742002004200656ad20072903002005420052ad7c7c7d3703000b4101210702402000200120022003100b0d002008200973410048044020034200200329030022057d370300200341086a220042002000290300220420054200522200ad7c7d370300200341106a22014200200129030022057d2206200020044200522004501bad22047d370300200341186a220042002004200656ad20002903002005420052ad7c7c7d3703000b41002107200941004e0d0020024200200229030022057d370300200241086a220042002000290300220420054200522200ad7c7d370300200241106a22014200200129030022057d2206200020044200522004501bad22047d370300200241186a220042002004200656ad20002903002005420052ad7c7c7d3703000b20070bef0302037f067e230041e0016b22092400200941386a4200370300200941186a4200420020027d220c2000420052220b20014200522001501bad220d54ad20032002420052ad7c7c7d20032003420053220a1b3703002009420037033020094200370328200942808090bbbad6adf00d3703202009420020007d2000200a1b3703002009200c200d7d2002200a1b370310200942002001200bad7c7d2001200a1b37030802402009200941206a200941406b100820034200200941d8006a290300220e200941d0006a290300220d420052ad7c4200200d7d22102009290340220f420052220b200941c8006a290300220c420052200c501bad221154ad7c7d200e200a1b220e85423f88a72000200284200120038484420052717245044020094198016a2007370300200941f8006a200e370300200920043703800120094200200f7d200f200a1b370360200920053703880120094200200c200bad7c7d200c200a1b37036820092006370390012009201020117d200d200a1b370370200941e0006a20094180016a200941a0016a200941c0016a100c450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000bd00402057f067e230041e0016b22092400200941386a4200420020067d220e2004420052220c20054200522005501bad221054ad20072006420052ad7c7c7d20072007420053220a1b370300200941186a4200420020027d22112000420052220d20014200522001501bad220f54ad20032002420052ad7c7c7d20032003420053220b1b3703002009420020047d2004200a1b3703202009420020007d2000200b1b3703002009200e20107d2006200a1b370330200942002005200cad7c7d2005200a1b37032820092011200f7d2002200b1b370310200942002001200dad7c7d2001200b1b37030802402009200941206a200941406b10084200200941d8006a290300220f200941d0006a2903002210420052ad7c420020107d221220092903402211420052220c200941c8006a290300220e420052200e501bad221354ad7c7d200f200a200b73220a1b220f200320078585423f88502000200284200120038484502004200684200520078484507272457245044020094198016a4200370300200941f8006a200f37030020094200370390012009420037038801200942808090bbbad6adf00d370380012009420020117d2011200a1b37036020094200200e200cad7c7d200e200a1b3703682009201220137d2010200a1b370370200941e0006a20094180016a200941a0016a200941c0016a100c450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000baf0302037f037e230041e0016b22052400200541386a4200420020027d22082000420052220720014200522001501bad220954ad20032002420052ad7c7c7d2003200342005322061b220a370300200541186a200a3703002005420020007d200020061b220a3703202005200a3703002005200820097d200220061b22083703302005420020012007ad7c7d200120061b2209370328200520083703102005200937030802402005200541206a200541406b1008200541d8006a2903002208423f8850200020028420012003848450724572450440200541d0006a2903002100200541c8006a29030021012005290340210220054198016a4200370300200541f8006a200837030020054200370390012005420037038801200542808090bbbad6adf00d37038001200520023703602005200137036820052000370370200541e0006a20054180016a200541a0016a200541c0016a100c450d014101413041241000000b4101410041241000000b200420052903c001370300200441186a200541d8016a2903003703002004200541d0016a2903003703102004200541c8016a290300370308200541e0016a240041000bc50201017f230041e0016b22092400200941386a4200370300200941186a20033703002009420037033020094200370328200942808090bbbad6adf00d37032020092002370310200920013703082009200037030002402009200941206a200941406b1008450440200941d8006a2903002100200941d0006a2903002101200941c8006a29030021022009290340210320094198016a2007370300200941f8006a2000370300200920043703800120092003370360200920053703880120092002370368200920063703900120092001370370200941e0006a20094180016a200941a0016a200941c0016a100b450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000bc50201017f230041e0016b22092400200941386a2007370300200941186a200337030020092006370330200920053703282009200437032020092002370310200920013703082009200037030002402009200941206a200941406b1008450440200941d8006a2903002100200941d0006a2903002101200941c8006a29030021022009290340210320094198016a4200370300200941f8006a200037030020094200370390012009420037038801200942808090bbbad6adf00d37038001200920033703602009200237036820092001370370200941e0006a20094180016a200941a0016a200941c0016a100b450d014101413041241000000b4101410041241000000b200820092903c001370300200841186a200941d8016a2903003703002008200941d0016a2903003703102008200941c8016a290300370308200941e0016a240041000baa1902067f0e7e230041e0006b22072400200741386a4200370300200741186a20033703002007420037033020074200370328200742808090bbbad6adf00d37032020072002370310200720013703082007200037030002402007200741206a200741406b1008450440200741d8006a2903002111200741d0006a2903002112200741c8006a290300211520072903402116200741206b22092400027f4200210242002103230041b0086b2205240002400240201220168420112015848450450440200541206b2206220a2400027e201120128450044020162101201221022011210b20150c010b42800121032012210120110b2100027e2000200b842002845004402003210c200b0c010b200342407d220c20035422082008ad22134200542003200c581bad2214420054ad210f2000210120022100200b210242000b211002402000422086200142208884220e20104220862002422088842203842002422086200042208884220d2010422088220b84845004402001210e2000210d200221032010210b200c210120132110201421170c010b200f2014200c42207c2201200c54220820132008ad7c22102013542001200c5a1bad7c2217201454ad7c210f0b0240200d423086200e421088842213200b4230862003421088842200842003423086200d421088842202200b42108822188484500440200e2113200d210220032100200b21182001210c20102114201721100c010b200f2017200142107c220c200154220820102008ad7c22142010542001200c581bad7c2210201754ad7c210f0b02402002423886201342088884220e20184238862000420888842203842000423886200242088884220d2018420888220b84845004402013210e2002210d200021032018210b200c2101201421172010210c0c010b200f2010200c42087c2201200c54220820142008ad7c22172014542001200c5a1bad7c220c201054ad7c210f0b0240200d423c86200e420488842213200b423c862003420488842200842003423c86200d420488842202200b42048822188484500440200e2113200d210220032100200b2118200121032017210e200c21010c010b200f200c200142047c2203200154220820172008ad7c220e20175420012003581bad7c2201200c54ad7c210f0b02402002423e8620134202888422142018423e86200042028884220d842000423e86200242028884220b2018420288220c8484500440201321142002210b2000210d2018210c20032100200e2102200121030c010b200f2001200342027c22002003542208200e2008ad7c2202200e54200020035a1bad7c2203200154ad7c210f0b0240200b423f86201442018884200c423f86200d4201888484200d423f86200b200c8442018884845004402000210d2002210b200321000c010b200f2003200042017c220d200054220820022008ad7c220b2002542000200d581bad7c2200200354ad7c210f0b2006200d3703002006200b37030820062000370310200641186a200f370300200541106a420142002006290300420188a722064180016b100920054201420041800120066b100a200541206a4201420020061009200541c8006a2011370300200541e8006a200541086a290300200541186a29030020064180014922081b420020061b220b3703002005201637033020052015370338200520123703402005200541286a290300420020081b220037035820052005290320420020081b220137035020052005290300200529031020081b420020061b2202370360200541306a200541d0006a200541f0006a20054190016a100b0d02200541c8016a2011370300200541e8016a20022002200541a0016a2903007c220356ad200b200541a8016a2903007c7c2003200320012005290390017c220b20015422062006ad200020054198016a2903007c7c220120005420002001511bad7c220256ad7c220c420188220d370300200520163703b001200520153703b801200520123703c00120052001423f86200b4201888422033703d00120052002423f8620014201888422003703d8012005200c423f8620024201888422013703e001200541b0016a200541d0016a200541f0016a20054190026a100b0d02200541c8026a2011370300200541e8026a2001200541a0026a2903007c2202200154ad200d200541a8026a2903007c7c20022002200320032005290390027c220b5622062006ad200020054198026a2903007c7c220120005420002001511bad7c220356ad7c220c420188220d370300200520163703b002200520153703b802200520123703c00220052001423f86200b4201888422023703d00220052003423f8620014201888422003703d8022005200c423f8620034201888422013703e002200541b0026a200541d0026a200541f0026a20054190036a100b0d02200541c8036a2011370300200541e8036a2001200541a0036a2903007c2203200154ad200d200541a8036a2903007c7c20032003200220022005290390037c220b5622062006ad200020054198036a2903007c7c220120005420002001511bad7c220256ad7c220c420188220d370300200520163703b003200520153703b803200520123703c00320052001423f86200b4201888422033703d00320052002423f8620014201888422003703d8032005200c423f8620024201888422013703e003200541b0036a200541d0036a200541f0036a20054190046a100b0d02200541c8046a2011370300200541e8046a2001200541a0046a2903007c2202200154ad200d200541a8046a2903007c7c20022002200320032005290390047c220b5622062006ad200020054198046a2903007c7c220120005420002001511bad7c220356ad7c220c420188220d370300200520163703b004200520153703b804200520123703c00420052001423f86200b4201888422023703d00420052003423f8620014201888422003703d8042005200c423f8620034201888422013703e004200541b0046a200541d0046a200541f0046a20054190056a100b0d02200541c8056a2011370300200541e8056a2001200541a0056a2903007c2203200154ad200d200541a8056a2903007c7c20032003200220022005290390057c220b5622062006ad200020054198056a2903007c7c220120005420002001511bad7c220256ad7c220c420188220d370300200520163703b005200520153703b805200520123703c00520052001423f86200b4201888422033703d00520052002423f8620014201888422003703d8052005200c423f8620024201888422013703e005200541b0056a200541d0056a200541f0056a20054190066a100b0d02200541c8066a2011370300200541e8066a2001200541a0066a2903007c2202200154ad200d200541a8066a2903007c7c20022002200320032005290390067c220b5622062006ad200020054198066a2903007c7c220120005420002001511bad7c220356ad7c220c420188220d370300200520163703b006200520153703b806200520123703c00620052001423f86200b4201888422023703d00620052003423f8620014201888422003703d8062005200c423f8620034201888422013703e006200541b0066a200541d0066a200541f0066a20054190076a100b0d02200541c8076a2011370300200541e8076a2001200541a0076a2903007c2203200154ad200d200541a8076a2903007c7c20032003200220022005290390077c220c5622062006ad200020054198076a2903007c7c220120005420002001511bad7c220b56ad7c22034201882200370300200520163703b007200520153703b807200520123703c00720052001423f86200c42018884220d3703d0072005200b423f8620014201888422023703d80720052003423f86200b4201888422033703e007200541b0076a200541d0076a200541f0076a20054190086a100b0d02200529039008210e20054198086a290300210b200541a0086a290300210c200541a8086a2903002101200a41206b220624000240200d200e5a2002200b5a2002200b511b2003200c5a200020015a20002001511b2003200c85200020018584501b4504402006200d3703002006200237030820062003370310200641186a20003703000c010b2006200e3703002006200b3703082006200c370310200641186a20013703000b0c010b200942003703102009420037030820094200370300200941186a4200370300200541b0086a240041000c020b20092006290300370300200941186a200641186a2903003703002009200641106a2903003703102009200641086a290300370308200541b0086a240041000c010b4101413041241000000b2205450d01200741e0006a240020050f0b4101410041241000000b20042009290300370300200441186a200941186a2903003703002004200941106a2903003703102004200941086a290300370308200741e0006a240041000bc50201017f230041e0016b22052400200541386a2003370300200541186a200337030020052002370330200520013703282005200037032020052002370310200520013703082005200037030002402005200541206a200541406b1008450440200541d8006a2903002100200541d0006a2903002101200541c8006a29030021022005290340210320054198016a4200370300200541f8006a200037030020054200370390012005420037038801200542808090bbbad6adf00d37038001200520033703602005200237036820052001370370200541e0006a20054180016a200541a0016a200541c0016a100b450d014101413041241000000b4101410041241000000b200420052903c001370300200441186a200541d8016a2903003703002004200541d0016a2903003703102004200541c8016a290300370308200541e0016a240041000bcc0702037f047e2300210b0240024002402000200284200120038484500440200b41206b220a2400200a41186a4200370300200a4200370310200a4200370308200a42013703004188024120360200027e200a412041900241880210010440420021074200210642000c010b41a00229030021064198022903002107419002290300210c41a8022903000b2104200a41206b22092400200c200720062004200020012002200320091011220a450d030c020b200b41206b220924002000200120022003200420052006200720091010220a450d000c010b200941186a2903002100200941106a2903002102200941086a29030021012009290300210d200941206b220a240042002103200a41186a4200370300200a4200370310200a4200370308200a42013703004188024120360200200a41204190024188021001047e42000541a802290300210e41a002290300210c41900229030021034198022903000b210f200a41206b220924000240024002402003200f200c200e200420052006200720091011220a450440200020002000200242017d2203200254ad7c20032003200d42808090bbbad6adf00d7d2205200d54220a2001200aad7c42017d220420015420012004511bad7c220656ad7c42017d220385834200530d01200941186a2903002107200941106a290300210c200941086a290300210e2009290300210f200941206b2209240020052004200620032009100f220a0d04200941186a2903002103200941106a2903002104200941086a290300210520092903002106200941206b22092400027e0240200f200e200c200720062005200420032009100e220a450440200941186a2903002104200941106a2903002105200941086a290300210620092903002107200941206b220a2400200a41186a4200370300200a4200370310200a4200370308200a42023703004188024120360200200a41204190024188021001450d014200210c4200210e4200210342000c020b0c060b41a802290300210341a002290300210e419802290300210c4190022903000b210f2000200385427f85200020022002200e7c220256ad200020037c7c2002200d200d200f7c220d5622092009ad2001200c7c7c220320015420012003511bad7c2201200254ad7c220285834200530d02200a41206b220924002007200620052004200d2003200120022009100d220a450d030c040b0c030b4101410041241000000b4101410041241000000b0c010b200b2400200a0f0b20082009290300370300200841186a200941186a2903003703002008200941106a2903003703102008200941086a290300370308200b240041000b9e0802067f0e7e230041206b22002400100741880241808002360200419002418802100341840241880228020022013602002000411036020c200041106a2000410c6a10042000290310210a200041186a290300210b0240024002400240024002400240200141034d0d00418002419002280200220036020020004199eaea9805470d00200a200b8450450d01200141046b220020014b22022002720d052000413f4d0d022001200141046b2200490d05200041c0004b0d03027f419402290300210d419c02290300210c41a402290300210a41ac02290300210b41b402290300210e41bc02290300210f41c402290300211041cc022903002111230041206b2202240002400240024042808090bbbad6adf00d420042004200200e200f20102011200210102200450440200241106a29030022072002290300220642808090bbbad6adf00d7c22092006542200200241086a29030022082000ad7c221220085420062009581b2200ad7c22062007542201200241186a29030022082001ad7c2213200854200620075a1b200020001b0d02200241206b2200240020092012200620132000101222010d03200041106a29030022072000290300220642808090bbbad6adf00d7c22092006542201200041086a29030022082001ad7c221220085420062009581b2201ad7c22062007542203200041186a29030022082003ad7c2213200854200620075a1b200120011b0d02200041206b22002400200e200f2010201120092012200620132000101122010d03200d20002903007c2208200d5422012001ad200c200041086a2903007c7c2209200c542009200c511b2201200a200041106a2903007c22062001ad7c2207200a542006200756ad2006200a54ad200b200041186a2903007c7c7c2206200b542006200b511b2007200a852006200b8584501b450d010c020b200241206a240020000c030b41e00010062201200c3703082001200d370300200141d0006a2007370300200141c8006a2009370300200141406b22042008370300200141306a2010370300200141286a200f370300200141206a2205200e3703002001200a370310200141d8006a2006370300200141386a2011370300200141186a200b370300200041206b22002400200041186a22034200370300200042003703102000420037030820004200370300200041202001412010021a20034200370300200042003703102000420037030820004201370300200041202005412010021a20034200370300200042003703102000420037030820004202370300200041202004412010021a200241206a240041000c020b4101410041241000000b200241206a240020010b450d040c060b4101410041001000000b4101410041001000000b410141d00141241000000b410141d00141241000000b41004100100541086a41001000000b4101410041241000000b000bc17702097f317e230041206b22022400100741880241808002360200419002418802100341840241880228020022013602002002411036020c200241106a2002410c6a10042002290310210c200241186a290300210b23002106024002400240024002400240200141034d0d0041800241900228020022023602000240024002400240024002400240024002400240024020024197d98daa7e4c0440200241cfe1afb579460d01200241c7a3bfb67a460d04200241e2f8f0c57b470d0c200b200c84500d060c0c0b20024198d98daa7e460d0220024184d58bfc00460d01200241fa88cad806470d0b200b200c84500d040c0b0b200b200c844200520d0a200641206b22012400200141206b22022400200241206b22042400230041206b220624004188024120360200200641186a4200370300200642003703102006420037030820064200370300200641204190024188021001047e42000541a002290300210d419802290300210f419002290300210a41a8022903000b210c200641206b22002400200041186a42003703002000420037031020004200370308200042013703004188024120360200200041204190024188021001047e42000541a00229030021094198022903002114419002290300211541a8022903000b210b200041206b22002400200041186a42003703002000420037031020004200370308200042023703004188024120360200200041204190024188021001047e42000541a00229030021104198022903002111419002290300211e41a8022903000b211d2001200a3703002001200f3703082001200d370310200141186a2200200c370300200241186a2203200b37030020022015370300200220143703082002200937031020042010370310200441186a2205201d3703002004201e37030020042011370308200641206a2400200141086a290300210d200141106a29030021102000290300210c200241086a290300210a200241106a29030021142003290300210b200441086a2903002109200441106a29030021112005290300210f200129030021152002290300211e2004290300211d41e0001005220141e0006a200f370300200141d8006a2011370300200141d0006a2009370300200141c8006a201d370300200141406b200b370300200141386a2014370300200141306a200a370300200141286a201e370300200141206a200c370300200141186a2010370300200141106a200d370300200141086a220120153703004100200141e0001000000b200b200c844200520d09200141046b220220014b22042004720d0d200241ff004d0d0a2001200141046b2202490d0d20024180014d0d060c0a0b200b200c844200520d08200141046b220220014b22042004720d0c200241ff004d0d092001200141046b2202490d0c20024180014d0d060c090b200b200c844200520d07200141046b220220014b22042004720d0b2002413f4d0d082001200141046b2202490d0b200241c0004d0d060c080b200141046b220220014b22042004720d0a200241ff004b04402001200141046b2202490d0b20024180014d0d020c080b0c070b200141046b220220014b22042004720d09200241ff004b04402001200141046b2202490d0a20024180014d0d020c070b0c060b418c032903002121418403290300212241fc02290300212041f402290300212341ec02290300211a41e402290300212941dc02290300211141d402290300212641cc02290300212441c402290300212841bc02290300212a41b402290300211941ac02290300210941a402290300211d419c02290300210c419402290300210b200641206b22042400027f230041e0076b22012400027e0240200b20267d221e200b56200c20117d200b2026542202ad7d220b200c56200b200c511b201d20297d22262002200c201154200c2011511bad220c7d2211201d562009201a7d201d202954ad7d200c202656ad7d220c2009562009200c511b2011201d852009200c8584501b450440200141206b22022400200241186a42003703002002420037031020024200370308200242023703004188024120360200200241204190024188021001450d0142000c020b0c0b0b41a0022903002114419802290300210d419002290300211041a8022903000b2109200241206b22002400024002400240024002400240024002400240201e200b2011200c2019202a20282024200010142202450440027e0240202320002903007c221a20235422022002ad2020200041086a2903007c7c222920205420202029511b22022022200041106a2903007c22202002ad7c221d202254201d202054ad2020202254ad2021200041186a2903007c7c7c222020215420202021511b201d202285202020218584501b450440200041206b22022400200241186a42003703002002420037031020024200370308200242013703004188024120360200200241204190024188021001450d0142000c020b0c150b41a802290300211541a002290300210a419802290300210f4190022903000b21122009427f85200920092014201042808090bbbad6adf00d7c22212010542200200d2000ad7c2222200d5420102021581bad7c2226201454ad7c222385834200530d13200241206b220024002012200f200a20152010200d201420092000100e22020d06200041186a290300210e200041106a290300211b200041086a290300211320002903002116200041206b220022032400201e200b2011200c2000100f22020d07200141186a4200370300200141386a42004200201b7d22182016420052220520134200522013501bad221754ad200e201b420052ad7c7c7d200e200e42005322021b3703002001420037031020014200370308200142043703002001420020132005ad7c7d201320021b3703282001420020167d201620021b3703202001201820177d201b20021b370330200041186a2903002127200041106a2903002125200041086a290300212b2000290300212c2001200141206a200141406b1008200e4200200141d8006a2903002217200141d0006a290300221f420052ad7c4200201f7d222d2001290340221c4200522205200141c8006a29030022184200522018501bad222e54ad7c7d201720021b221785423f88a72016201b84200e2013848442005271720d13200141f8006a420037030020014198016a42004200200a7d220e20124200522207200f420052200f501bad221354ad2015200a420052ad7c7c7d2015201542005322001b37030020014200370370200142003703682001420437036020014200200f2007ad7c7d200f20001b370388012001420020127d201220001b370380012001200e20137d200a20001b37039001200141e0006a20014180016a200141a0016a100820154200200141b8016a2903002216200141b0016a2903002213420052ad7c420020137d222f20012903a001221b4200522207200141a8016a290300220e420052200e501bad223054ad7c7d201620001b221685423f88a7200a201284200f2015848442005271720d132016201785427f852017202d202e7d201f20021b221f202f20307d201320001b7c2213201f54ad201620177c7c201320134200201c7d201c20021b22164200201b7d201b20001b7c221b20165422082008ad420020182005ad7c7d201820021b22164200200e2007ad7c7d200e20001b7c7c220e201654200e2016511bad7c221656ad7c221385834200530d132013201320132016201642017d221856ad7c2018201b201b42808090bbbad6adf00d7d2216562202200e2002ad7c42017d221b200e54200e201b511bad7c220e201854ad7c42017d221885834200530d13200341206b220024002016201b200e2018202c202b202520272000100e22020d06200041186a290300220e4200200e200041106a2903002213420052ad7c420020137d222f200029030022304200522203200041086a29030022274200522027501bad223154ad7c7d221b834200530d13200041206b22002400201e200b2011200c2012200f200a20152000100e22020d06200041186a290300210e200041106a2903002113200041086a29030021162000290300200041206b2200240020162013200e2019202a202820242000100e22020d08200141d8016a4200370300200141f8016a4200200041186a290300220e200041106a2903002216420052ad7c420020167d2217200029030022184200522205200041086a29030022134200522013501bad221f54ad7c7d200e200e42005322021b370300200142003703d001200142003703c801200142083703c0012001420020187d201820021b3703e0012001420020132005ad7c7d201320021b3703e80120012017201f7d201620021b3703f001200141c0016a200141e0016a20014180026a1008200e420020014198026a290300222520014190026a290300221f420052ad7c4200201f7d222b200129038002221c420052220520014188026a29030022174200522017501bad222c54ad7c7d202520021b222585423f88a72016201884200e2013848442005271720d13200041206b220024004200201c7d201c20021b420020172005ad7c7d201720021b202b202c7d201f20021b202520212022202620232000100e22020d07200041186a2903002116200041106a2903002125200041086a29030021182000290300212b200041206b22002400201e200b2011200c2010200d201420092000100e22020d06200041186a290300210e200041106a2903002113200041086a29030021172000290300200041206b2200240020172013200e2019202a202820242000100e22020d08200141b8026a4200370300200141d8026a4200200041186a290300220e200041106a2903002217420052ad7c420020177d221c2000290300221f4200522205200041086a29030022134200522013501bad222c54ad7c7d200e200e42005322021b370300200142003703b002200142003703a802200142023703a00220014200201f7d201f20021b3703c0022001420020132005ad7c7d201320021b3703c8022001201c202c7d201720021b3703d002200141a0026a200141c0026a200141e0026a1008200e4200200141f8026a290300222e200141f0026a290300222c420052ad7c4200202c7d223220012903e002222d4200522205200141e8026a290300221c420052201c501bad223354ad7c7d202e20021b222e85423f88a72017201f84200e2013848442005271720d132016202e85427f8520162025203220337d202c20021b7c220e202554ad2016202e7c7c200e202b4200202d7d202d20021b7c2217202b5422072007ad20184200201c2005ad7c7d201c20021b7c7c221320185420132018511bad7c2218200e54ad7c220e85834200530d13200e201b85427f85201b2018202f20317d221f7c2216201f54ad200e201b7c7c2016420020307d220e20177c2218200e5422022002ad2013420020272003ad7c7d22177c7c220e201754200e2017511bad7c2217201654ad7c221685834200530d1320014198036a4200370300200141b8036a4200420020117d2213201e4200522203200b420052200b5022051bad221b54ad200c2011420052ad7c7c7d200c200c42005322021b37030020014200370390032001420037038803200142023703800320014200200b2003ad7c7d200b20021b3703a80320014200201e7d201e20021b3703a00320012013201b7d201120021b3703b00320014180036a200141a0036a200141c0036a1008200c4200200141d8036a290300221c200141d0036a290300221b420052ad7c4200201b7d222720012903c003221f4200522203200141c8036a29030022134200522013501bad222554ad7c7d201c20021b221c85423f88a72011201e84200b200c848442005271720d13200041206b220024004200201f7d201f20021b420020132003ad7c7d201320021b202720257d201b20021b201c20212022202620232000100e22020d07200041186a2903002113200041106a290300211b200041086a290300211f2000290300200041206b22002400201f201b2013201a2029201d20202000100e22020d062016200041186a290300221385427f8520162017200041106a2903007c221b201754ad201320167c7c201b201820002903007c221720185422022002ad200e200041086a2903007c7c2213200e54200e2013511bad7c2218201b54ad7c220e85834200530d13200041206b220024002019202a202820242000101322020d06200041186a290300211b200041106a2903002116200041086a290300211f2000290300211c200041206b220024002012200f200a2015201c201f2016201b2000100e22020d06200041186a290300210a200041106a290300210f200041086a29030021152000290300200041206b220024002015200f200a20212022202620232000100e22020d09200141f8036a420037030020014198046a4200200041186a290300220a200041106a2903002215420052ad7c420020157d221b200029030022124200522203200041086a290300220f420052200f501bad221654ad7c7d200a200a42005322021b370300200142003703f003200142003703e803200142043703e0032001420020127d201220021b3703800420014200200f2003ad7c7d200f20021b370388042001201b20167d201520021b37039004200141e0036a20014180046a200141a0046a1008200a4200200141b8046a290300221c200141b0046a2903002216420052ad7c420020167d222720012903a004221f4200522203200141a8046a290300221b420052201b501bad222554ad7c7d201c20021b221c85423f88a72012201584200a200f848442005271720d13200e201c85200e200e201c7d2018202720257d201620021b220a54ad7d2018200a7d222e20174200201f7d201f20021b222f54220720134200201b2003ad7c7d201b20021b221f542013201f511bad223054ad7d221b85834200530d13200041206b220024002010200d201420092000100f22020d06200041186a2903002131200041106a2903002132200041086a29030021332000290300200041206b220024002019202a202820242000101322020d06200041186a290300210e200041106a290300211c200041086a290300211620002903002127200041206b220024002019202a20282024201a2029201d20202000100e22020d06200041186a290300210a200041106a2903002115200041086a290300210f20002903002112200041206b22002400201a2029201d20202000100f22020d07200141d8046a4200370300200141f8046a4200420020157d221820124200522203200f420052200f501bad222554ad200a2015420052ad7c7c7d200a200a42005322021b370300200142003703d004200142003703c804200142023703c00420014200200f2003ad7c7d200f20021b3703e8042001420020127d201220021b3703e0042001201820257d201520021b3703f004200041186a2903002125200041106a2903002135200041086a290300213620002903002137200141c0046a200141e0046a20014180056a1008200a420020014198056a290300222d20014190056a290300222b420052ad7c4200202b7d2238200129038005222c420052220320014188056a29030022184200522018501bad223954ad7c7d202d20021b222d85423f88a72012201584200a200f848442005271720d13200e202d85427f85200e201c203820397d202b20021b7c220f201c54ad200e202d7c7c200f20274200202c7d202c20021b7c221520275422082008ad2016420020182003ad7c7d201820021b7c7c220a201654200a2016511bad7c2212200f54ad7c220f85834200530d13200f202585427f85200f2012201220357c220e56ad200f20257c7c200e2015201520377c22125622022002ad200a20367c7c2215200a54200a2015511bad7c220a200e54ad7c220e85834200530d13200041206b2200240020332032203120122015200a200e2000100e22020d09201b200041186a290300220a85427f85201b202e20307d2215200041106a2903007c220f201554ad200a201b7c7c200f2017202f7d220a20002903007c2216200a5422022002ad2013201f7d2007ad7d2215200041086a2903007c7c220a201554200a2015511bad7c2213200f54ad7c221585834200530d13200141b8056a4200370300200141d8056a4200420020147d220f20104200522203200d420052200d501bad221254ad20092014420052ad7c7c7d2009200942005322021b370300200142003703b005200142003703a805200142023703a00520014200200d2003ad7c7d200d20021b3703c8052001420020107d201020021b3703c0052001200f20127d201420021b3703d005200141a0056a200141c0056a200141e0056a100820094200200141f8056a290300220f200141f0056a290300221b420052ad7c4200201b7d221820012903e005220e4200522203200141e8056a29030022124200522012501bad221754ad7c7d200f20021b220f85423f88a720102014842009200d848442005271720d13200041206b220024004200200e7d200e20021b220e420020122003ad7c7d201220021b2212201820177d201b20021b221b200f2019202a202820242000100e22020d07200041186a2903002118200041106a2903002117200041086a290300211f2000290300200041206b22002400201f20172018201a2029201d20202000100e22020d06200f427f85200f200f201b200e42808090bbbad6adf00d7c2218200e54220220122002ad7c2217201254200e2018581bad7c221f201b54ad7c221c85834200530d13200041186a290300210f200041106a290300210e200041086a29030021122000290300211b200041206b2200240020182017201f201c201a2029201d20202000100e22020d06200041186a2903002118200041106a2903002117200041086a290300211f2000290300200041206b22002400201f20172018201a2029201d20202000100e22020d06200f200041186a290300221785427f85200f200e200e200041106a2903007c221856ad200f20177c7c20182018201b201b20002903007c22175622022002ad2012200041086a2903007c7c220e201254200e2012511bad7c221b56ad7c221285834200530d132012201585427f8520152013201b7c220f201354ad201220157c7c200f201620177c221320165422022002ad200a200e7c7c2212200a54200a2012511bad7c220a200f54ad7c220f85834200530d13200041206b2200240020132012200a200f2000101222020d09200041186a290300210a200041206b22022400200a4200530d01200041106a290300210f200041086a290300211520022000290300370300200220153703082002200f370310200241186a2200200a3703002000290300210a200241106a2903002115200241086a290300210f20022903002112200241206b220024002010200d201420092019202a202820242000100e22020d06200041186a2903002114200041106a2903002109200041086a290300210d20002903002124200041206b220024002021202220262023201a2029201d20202000100e22020d06200c4200420020117d221d201e4200522202200b42005220051bad222054ad200c2011420052ad7c7c7d2210834200530d1320102014852010201020147d201d20207d220c200954ad7d200c20097d22094200201e7d221120245422034200200b2002ad7c7d2214200d54200d2014511bad220b54ad7d220c85834200530d13200c200041186a290300221085427f85200c2009200b7d2209200041106a2903007c220b200954ad200c20107c7c200b200b201120247d221020002903007c220920105422022002ad2014200d7d2003ad7d220d200041086a2903007c7c2210200d54200d2010511bad7c220d56ad7c220b85834200530d13200a200b85427f85200b200d200d20157c221156ad200a200b7c7c20112011200920127c220c20095422022002ad200f20107c7c220d201054200d2010511bad7c221456ad7c221085834200530d13200041206b2202240002402010420053044020104200420020147d220b200c4200522200200d420052200d501bad220954ad20102014420052ad7c7c7d221183420059044020024200200c7d37030020024200200d2000ad7c7d3703082002200b20097d370310200241186a20113703000c020b0c150b2002200c3703002002200d37030820022014370310200241186a20103703000b200241186a290300210b200241106a2903002109200241086a29030021112002290300211e200241206b220224000240200a4200530440200a4200420020157d221d20124200522200200f420052200f501bad222054ad200a2015420052ad7c7c7d22158342005904402002420020127d37030020024200200f2000ad7c7d3703082002201d20207d370310200241186a20153703000c020b0c150b200220123703002002200f37030820022015370310200241186a200a3703000b200141b8066a420037030020014198066a200241186a290300370300200142003703b006200142003703a8062001428094ebdc033703a00620012002290300370380062001200241106a290300370390062001200241086a2903003703880620014180066a200141a0066a200141c0066a200141e0066a100c0d0220012903e006201e542011200141e8066a290300220a56200a2011511b2009200141f0066a290300221156200b200141f8066a290300220a55200a200b511b2009201185200a200b8584501b450d0320014198076a4200370300200141b8076a4200420020267d220a2021420052220320224200522022501bad220b54ad20232026420052ad7c7c7d2023202342005322001b3703002001420037039007200142003703880720014202370380072001420020222003ad7c7d202220001b3703a8072001420020217d202120001b3703a0072001200a200b7d202620001b3703b00720014180076a200141a0076a200141c0076a100820234200200141d8076a2903002211200141d0076a290300220b420052ad7c4200200b7d220f20012903c00722094200522205200141c8076a290300220a420052200a501bad221554ad7c7d201120001b221185423f88a7202120268420222023848442005271720d13200241206b22032400200c200d20142010420020097d200920001b4200200a2005ad7c7d200a20001b200f20157d200b20001b20112003100d22020d07200341186a290300210d200341206b22022400200d4200530d04200341106a2903002110200341086a290300210c200220032903003703002002200c37030820022010370310200241186a200d3703000c050b0c050b410141800141151000000b4101413041241000000b410141a00141221000000b410141e00041161000000b20042002290300370300200441186a200241186a2903003703002004200241106a2903003703102004200241086a290300370308200141e0076a240041000c040b200141e0076a240020020c030b200141e0076a240020020c020b200141e0076a240020020c010b200141e0076a240020020b450d070c060b418c032903002119418403290300211a41fc02290300211241f402290300212841ec02290300212641e402290300212141dc02290300211541d402290300212441cc02290300210d41c402290300211041bc02290300210c41b402290300211441ac02290300210b41a4022903002109419c022903002111419402290300210f200641206b22042400027f230041a0056b22012400027e0240200f20247d221b200f56201120157d200f2024542202ad7d222a2011562011202a511b200920217d22242002201120155420112015511bad22157d2229200956200b20267d2009202154ad7d2015202456ad7d2226200b56200b2026511b2009202985200b20268584501b450440200141206b22022400200241186a42003703002002420037031020024200370308200242013703004188024120360200200241204190024188021001450d0142000c020b0c0a0b41a802290300211e41a002290300211d41980229030021204190022903000b2121200241206b22022400200241186a42003703002002420037031020024200370308200242023703004188024120360200200241204190024188021001047e42000541a00229030021224198022903002123419002290300210a41a8022903000b2124024002400240200f20287c2228200f5422002000ad201120127c7c221520115420112015511b22002009201a7c22112000ad7c220f200954200f201154ad2009201156ad200b20197c7c7c2211200b54200b2011511b2009200f85200b20118584501b450440200241206b2200240020212020201d201e200a2023202220242000100e22020d02200041186a290300210b200041106a2903002109200041086a29030021192000290300200041206b220024002014200c2010200d2000101322020d02200041186a2903002112200041106a290300210e200041086a290300211320002903002116200041206b2200240020192009200b20162013200e20122000100e22020d03200141186a4200370300200141386a4200200041186a290300220b200041106a2903002219420052ad7c420020197d22122000290300221a4200522203200041086a29030022094200522009501bad220e54ad7c7d200b200b42005322021b37030020014200370310200142003703082001420437030020014200201a7d201a20021b3703202001420020092003ad7c7d200920021b37032820012012200e7d201920021b3703302001200141206a200141406b1008200b4200200141d8006a2903002216200141d0006a290300220e420052ad7c4200200e7d2218200129034022134200522203200141c8006a29030022124200522012501bad221754ad7c7d201620021b221685423f88a72019201a842009200b848442005271720d0c201642002016201820177d200e20021b220b420052ad7c4200200b7d221f420020137d201320021b221c4200522205420020122003ad7c7d201220021b22134200522013501bad222754ad7c7d2219834200530d0c200041206b2200240020212020201d201e200a2023202220242000100e22020d02200041186a290300210b200041106a2903002109200041086a290300211a2000290300200041206b22002400201a2009200b2014200c2010200d2000100e22020d02200041186a290300210b200041106a2903002109200041086a290300211a2000290300200041206b22002400201a2009200b20282015200f20112000100e22020d03200141f8006a420037030020014198016a4200200041186a290300220b200041106a290300221a420052ad7c4200201a7d220e200029030022124200522203200041086a29030022094200522009501bad221654ad7c7d200b200b42005322021b3703002001420037037020014200370368200142043703602001420020127d201220021b370380012001420020092003ad7c7d200920021b370388012001200e20167d201a20021b37039001200141e0006a20014180016a200141a0016a1008200b4200200141b8016a2903002217200141b0016a2903002216420052ad7c420020167d222520012903a00122184200522203200141a8016a290300220e420052200e501bad222b54ad7c7d201720021b221785423f88a72012201a842009200b848442005271720d0c2017201985427f852019201f20277d220b2025202b7d201620021b7c2209200b54ad201720197c7c20094200201c7d220b420020187d201820021b7c2216200b5422072007ad420020132005ad7c7d221a4200200e2003ad7c7d200e20021b7c7c220b201a54200b201a511bad7c2218200954ad7c221a85834200530d0c200041206b220024002014200c2010200d2000101322020d02200041186a2903002109200041106a2903002119200041086a29030021122000290300210e200041206b2200240020212020201d201e200e2012201920092000100e22020d03200141d8016a4200370300200141f8016a4200200041186a2903002209200041106a2903002212420052ad7c420020127d22132000290300220e4200522203200041086a29030022194200522019501bad221754ad7c7d2009200942005322021b370300200142003703d001200142003703c801200142043703c00120014200200e7d200e20021b3703e0012001420020192003ad7c7d201920021b3703e8012001201320177d201220021b3703f001200141c0016a200141e0016a20014180026a10082009420020014198026a290300221c20014190026a2903002217420052ad7c420020177d2227200129038002221f420052220320014188026a29030022134200522013501bad222554ad7c7d201c20021b221c85423f88a7200e20128420092019848442005271720d0c201a201c85201a201a201c7d2018202720257d201720021b220954ad7d201820097d222720164200201f7d201f20021b2225542205200b420020132003ad7c7d201320021b221854200b2018511bad222b54ad7d221285834200530d0c200041206b2200240020212020201d201e2014200c2010200d2000100e22020d02200041186a2903002109200041106a2903002119200041086a290300211a2000290300200041206b22002400201a2019200920282015200f20112000100e22020d03200141b8026a4200370300200141d8026a4200200041186a2903002209200041106a290300221a420052ad7c4200201a7d22132000290300220e4200522203200041086a29030022194200522019501bad221754ad7c7d2009200942005322021b370300200142003703b002200142003703a802200142043703a00220014200200e7d200e20021b3703c0022001420020192003ad7c7d201920021b3703c8022001201320177d201a20021b3703d002200141a0026a200141c0026a200141e0026a100820094200200141f8026a290300221c200141f0026a2903002217420052ad7c420020177d222c20012903e002221f4200522203200141e8026a29030022134200522013501bad222d54ad7c7d201c20021b221c85423f88a7200e201a8420092019848442005271720d0c2012201c85427f8520122027202b7d2219202c202d7d201720021b7c2209201954ad2012201c7c7c20092009201620257d22194200201f7d201f20021b7c221a20195422072007ad200b20187d2005ad7d2219420020132003ad7c7d201320021b7c7c220b201954200b2019511bad7c220e56ad7c221985834200530d0c200041206b22002400200a2023202220242000100f22020d02200041186a2903002109200041106a2903002112200041086a29030021132000290300200041206b220024002014200c2010200d2000101322020d02200041186a2903002118200041106a2903002117200041086a290300211f2000290300211c200041206b22002400201320122009201c201f201720182000100e22020d022019200041186a290300220985427f852019200e200041106a2903007c2212200e54ad200920197c7c2012201a20002903007c2216201a5422022002ad200b200041086a2903007c7c2209200b542009200b511bad7c2218201254ad7c221a85834200530d0c200041206b22002400200a2023202220242014200c2010200d2000100e22020d02200041186a290300210b200041106a2903002119200041086a29030021122000290300200041206b2200240020122019200b20282015200f20112000100e22020d0320014198036a4200370300200141b8036a4200200041186a290300220b200041106a2903002212420052ad7c420020127d22132000290300220e4200522203200041086a29030022194200522019501bad221754ad7c7d200b200b42005322021b37030020014200370390032001420037038803200142023703800320014200200e7d200e20021b3703a0032001420020192003ad7c7d201920021b3703a8032001201320177d201220021b3703b00320014180036a200141a0036a200141c0036a1008200b4200200141d8036a290300221c200141d0036a2903002217420052ad7c420020177d222720012903c003221f4200522203200141c8036a29030022134200522013501bad222554ad7c7d201c20021b221c85423f88a7200e201284200b2019848442005271720d0c201a201c85427f85201a2018202720257d201720021b7c2219201854ad201a201c7c7c2019201920164200201f7d201f20021b7c221220165422052005ad2009420020132003ad7c7d201320021b7c7c220b2009542009200b511bad7c220e56ad7c220985834200530d0c200041206b2200240020282015200f20112000100f22020d022009200041186a290300221a85427f852009200e200e200041106a2903007c221956ad2009201a7c7c201920192012201220002903007c220e5622022002ad200b200041086a2903007c7c221a200b54200b201a511bad7c221256ad7c221985834200530d0c200041206b2200240020212020201d201e2014200c2010200d2000100e22020d02200041186a290300210b200041106a290300211e200041086a29030021092000290300211d200041206b22002400200a2023202220242014200c2010200d2000100e22020d02200041186a2903002122200041106a2903002123200041086a290300210c20002903002124200041206b22002400027e0240200e201a20122019200010122202450440200041186a2903002119200041106a290300210e200041086a290300211320002903002116200041206b220222002400200241186a42003703002002420037031020024200370308200242013703004188024120360200200241204190024188021001450d014200210d420021104200210a42000c020b0c040b41a802290300210a41a0022903002110419802290300210d4190022903000b2114200141f8036a420037030020014198046a42004200201e7d2220201d420052220320094200522009501bad222154ad200b201e420052ad7c7c7d200b200b42005322021b370300200142003703f003200142003703e803200142023703e0032001420020092003ad7c7d200920021b3703880420014200201d7d201d20021b370380042001202020217d201e20021b37039004200141e0036a20014180046a200141a0046a1008200b4200200141b8046a2903002221200141b0046a290300221a420052ad7c4200201a7d221820012903a00422124200522203200141a8046a29030022204200522020501bad221754ad7c7d202120021b222185423f88a7201d201e842009200b848442005271720d0c20212022852021202120227d201820177d201a20021b220b202354ad7d200b20237d221e420020127d201220021b221d2024542205420020202003ad7c7d202020021b2209200c542009200c511bad222054ad7d220b85834200530d0c200b201185427f85200b201e20207d221e200f7c220f201e54ad200b20117c7c200f200f201d20247d221e20287c2211201e5422022002ad2009200c7d2005ad7d220920157c7c220c2009542009200c511bad7c221556ad7c220985834200530d0c2009201985427f8520092015200e20157c220b56ad200920197c7c200b200b2011201120167c220f5622022002ad200c20137c7c2211200c54200c2011511bad7c221556ad7c220b85834200530d0c2010201442808090bbbad6adf00d7c220c2014542202200d200d2002ad7c220956200c20145a1b2202ad7c220d2010542203200a200a2003ad7c221456200d20105a1b200220021b0d0c200141d8046a4200370300200141f8046a20143703002001200c3703e004200142003703d004200142003703c804200142023703c004200120093703e8042001200d3703f004200141c0046a200141e0046a20014180056a10080d0c20014198056a290300210d20014190056a290300211020014188056a290300210c200129038005210a200041206b22002400200f20112015200b200a200c2010200d2000101022020d0220002903002210201b7d220b201056200041086a290300220d202a7d2010201b542202ad7d220a200d56200a200d511b200041106a290300221020297d220c2002200d202a54200d202a511bad22097d2214201056200041186a290300220d20267d2010202954ad7d2009200c56ad7d220c200d56200c200d511b2010201485200c200d8584501b450d010c0c0b0c0b0b2004200b3703002004200a37030820042014370310200441186a200c370300200141a0056a240041000c020b200141a0056a240020020c010b200141a0056a240020020b450d060c050b418c032903002110418403290300210c41fc02290300210b41f402290300210941ec02290300212441e402290300211e41dc02290300211441d402290300211d41cc02290300212041c402290300212141bc02290300212241b402290300212341ac02290300210f41a4022903002115419c02290300210d419402290300210a200641206b22042400027f2300210202400240024002400240200a201d7d2211200a56200d20147d200a201d542201ad7d220a200d56200a200d511b2015201e7d221d2001200d201454200d2014511bad220d7d2214201556200f20247d2015201e54ad7d200d201d56ad7d220d200f56200d200f511b2014201585200d200f8584501b4504402009201158200a200b5a200a200b5122001b200c201458200d20105a200d2010511b200c201485200d20108584501b450d01200241206b220124002011200a2014200d20232022202120202001101422030d02201120097d2215201156200a200b7d20092011562203ad7d2211200a56200a2011511b2014200c7d221e2003200a200b5420001bad220a7d220f201456200d20107d200c201456ad7d200a201e56ad7d220a200d56200a200d511b200f201485200a200d8584501b0d05200141186a290300211e200141106a2903002114200141086a290300210d2001290300211d200141206b2201240020152011200f200a20232022202120202001101422000d0320092009201d7c22115622002000ad200b200d7c7c220d200b54200b200d511b2200200c20147c22142000ad7c220a200c54200a201454ad200c201456ad2010201e7c7c7c221420105420102014511b200a200c85201020148584501b0d0520112001290300220c7d220b201156200d200141086a29030022107d200c2011562200ad7d220c200d56200c200d511b200a200141106a29030022097d22112000200d201054200d2010511bad220d7d2210200a562014200141186a2903007d2009200a56ad7d200d201156ad7d220d201456200d2014511b200a201085200d20148584501b450d040c050b0c040b4101410041001000000b2002240020030c030b2002240020000c020b2004200b3703002004200c37030820042010370310200441186a200d3703002002240041000c010b0c070b450d050c040b418c032903002114418403290300211041fc02290300210d41f402290300210b41ec02290300212441e402290300212241dc02290300211141d402290300212341cc02290300210f41c402290300211541bc02290300210941b402290300211e41ac02290300211d41a4022903002120419c02290300210a419402290300210c200641206b22042400027f230021020240024002400240200c20237d2221200c56200a20117d200c2023542201ad7d220c200a56200a200c511b202020227d22232001200a201154200a2011511bad220a7d2211202056201d20247d2020202254ad7d200a202356ad7d220a201d56200a201d511b2011202085200a201d8584501b450440200241206b220124002021200c2011200a201e20092015200f2001101422000d012021200b7d2222202156200c200d7d200b2021562200ad7d221d200c56200c201d511b201120107d22212000200c200d54200c200d511bad220c7d2220201156200a20147d2010201156ad7d200c202156ad7d220c200a56200a200c511b2011202085200a200c8584501b0d04201e200b7d2221201e562009200d7d200b201e562200ad7d221120095620092011511b201520107d220a20002009200d542009200d511bad221e7d2209201556200f20147d2010201556ad7d200a201e54ad7d220a200f56200a200f511b2009201585200a200f8584501b0d04200141186a290300210f200141106a2903002115200141086a290300211e20012903002123200141206b220124002022201d2020200c202120112009200a2001101422000d02200b200b20237c22095622002000ad200d201e7c7c220c200d54200c200d511b2200201020157c220a2000ad7c220d201054200a200d56ad200a201054ad200f20147c7c7c220a201454200a2014511b200d201085200a20148584501b0d042009200129030022147d220b200956200c200141086a29030022107d20092014542200ad7d2214200c56200c2014511b200d200141106a29030022097d22112000200c201054200c2010511bad22107d220c200d56200a200141186a2903007d2009200d56ad7d2010201156ad7d2210200a56200a2010511b200c200d85200a20108584501b450d030c040b0c030b2002240020000c030b2002240020000c020b2004200b370300200420143703082004200c370310200441186a20103703002002240041000c010b0c060b450d040c030b41cc02290300210d41c402290300211041bc02290300210c41b402290300210a41ac02290300211441a402290300210b419c022903002109419402290300200641206b220424002009200b2014200a200c2010200d20041014450d030c020b4101410041001000000b410141d00141241000000b200624000c020b200441086a290300210d200441106a2903002110200441186a290300210c2004290300210a41201005220141206a200c370300200141186a2010370300200141106a200d370300200141086a2201200a3703004100200141201000000b4101410041241000000b000b0b7e060041000b054e487b71110041300b054e487b71120041e0000b1608c379a04453444d6174683a20554e444552464c4f57004180010b1508c379a04055444d6174683a204f564552464c4f570041a0010b2208c379a0744e61626c6143757276653a204445504f5349545f544f4f5f534d414c4c0041d0010b044e487b71008e010970726f64756365727302086c616e6775616765010143000c70726f6365737365642d62790105636c616e676131352e302e34202868747470733a2f2f6769746875622e636f6d2f736f6c616e612d6c6162732f6c6c766d2d70726f6a6563742e676974203333633336323963616135396235396438663538353733366134613531393461613965393337376429" - }, - "spec": { - "constructors": [ - { - "args": [ - { - "label": "_alpha", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_beta", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "new", - "payable": false, - "returnType": null, - "selector": "0x19b51a53" - } - ], - "docs": [ - "implementation of the Nabla slippage curve" - ], - "environment": { - "accountId": { - "displayName": [ - "AccountId" - ], - "type": 5 - }, - "balance": { - "displayName": [ - "Balance" - ], - "type": 6 - }, - "blockNumber": { - "displayName": [ - "BlockNumber" - ], - "type": 7 - }, - "chainExtension": { - "displayName": [], - "type": 0 - }, - "hash": { - "displayName": [ - "Hash" - ], - "type": 8 - }, - "maxEventTopics": 4, - "timestamp": { - "displayName": [ - "Timestamp" - ], - "type": 7 - } - }, - "events": [], - "lang_error": { - "displayName": [ - "SolidityError" - ], - "type": 12 - }, - "messages": [ - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "params", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "NablaCurve", - "params", - "return_type" - ], - "type": 2 - }, - "selector": "0xcff0ab96" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_depositAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts deposit amount by slippage for a pool of a given coverage ratio" - ], - "label": "effectiveDeposit", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x7a84126b" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_deltaAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts amount by slippage for a swap adding liquidity to this pool total swap fee is the sum of the swap fees of each pool involved" - ], - "label": "effectiveSwapIn", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x623cbcb8" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_deltaAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts amount by slippage for a swap draining liquidity from this pool total swap fee is the sum of the swap fees of each pool involved" - ], - "label": "effectiveSwapOut", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x84ea820f" - }, - { - "args": [ - { - "label": "_reservesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilitiesBefore", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_accumulatedPoolSlippage", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_withdrawalAmount", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "adjusts withdrawal amount by slippage for a pool of a given coverage ratio" - ], - "label": "effectiveWithdrawal", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0x986c43e5" - }, - { - "args": [ - { - "label": "_reserves", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - }, - { - "label": "_liabilities", - "type": { - "displayName": [ - "uint256" - ], - "type": 0 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "phi", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 0 - }, - "selector": "0xc7d1cfa6" - } - ] - }, - "storage": { - "struct": { - "fields": [ - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 0 - } - }, - "name": "alpha" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 0 - } - }, - "name": "beta" - }, - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 0 - } - }, - "name": "c" - } - ], - "name": "Params" - } - }, - "root_key": "0x00000000" - } - }, - "name": "params" - } - ], - "name": "NablaCurve" - } - }, - "types": [ - { - "id": 0, - "type": { - "def": { - "primitive": "u256" - }, - "path": [ - "uint256" - ] - } - }, - { - "id": 1, - "type": { - "def": { - "composite": { - "fields": [ - { - "name": "alpha", - "type": 0 - }, - { - "name": "beta", - "type": 0 - }, - { - "name": "c", - "type": 0 - } - ] - } - }, - "path": [ - "Params" - ] - } - }, - { - "id": 2, - "type": { - "def": { - "tuple": [ - 0, - 0, - 0 - ] - }, - "path": [ - "NablaCurve", - "params", - "return_type" - ] - } - }, - { - "id": 3, - "type": { - "def": { - "primitive": "u8" - }, - "path": [ - "uint8" - ] - } - }, - { - "id": 4, - "type": { - "def": { - "array": { - "len": 32, - "type": 3 - } - } - } - }, - { - "id": 5, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 4 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "AccountId" - ] - } - }, - { - "id": 6, - "type": { - "def": { - "primitive": "u128" - }, - "path": [ - "uint128" - ] - } - }, - { - "id": 7, - "type": { - "def": { - "primitive": "u64" - }, - "path": [ - "uint64" - ] - } - }, - { - "id": 8, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 4 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "Hash" - ] - } - }, - { - "id": 9, - "type": { - "def": { - "primitive": "str" - }, - "path": [ - "string" - ] - } - }, - { - "id": 10, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 9 - } - ] - } - }, - "path": [ - "0x08c379a0" - ] - } - }, - { - "id": 11, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 0 - } - ] - } - }, - "path": [ - "0x4e487b71" - ] - } - }, - { - "id": 12, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 10 - } - ], - "index": 0, - "name": "Error" - }, - { - "fields": [ - { - "type": 11 - } - ], - "index": 1, - "name": "Panic" - } - ] - } - }, - "path": [ - "SolidityError" - ] - } - } - ], - "version": "4" -} \ No newline at end of file diff --git a/nabla/README.md b/nabla/README.md index 318aff4..adf59d2 100644 --- a/nabla/README.md +++ b/nabla/README.md @@ -1,6 +1 @@ -This folder is experimental and needs to be removed eventually and moved to the Nabla repository. - -There are two different configuration files here: - -- config.json: here access to the Nabla curve repository is assumed -- \_config_precompiledCurve.json: this can be used if there is no access to the Nabla curve repository and we provide a precompiled version of the curve contract +This project contains Nabla deployment instructions and tests diff --git a/nabla/VendingMachine.contract b/nabla/VendingMachine.contract deleted file mode 100644 index 4a55d52..0000000 --- a/nabla/VendingMachine.contract +++ /dev/null @@ -1,582 +0,0 @@ -{ - "contract": { - "authors": [ - "unknown" - ], - "description": "Stateful mock AMM to test the slippage curve.", - "name": "VendingMachine", - "version": "0.0.1" - }, - "source": { - "compiler": "solang 0.3.2", - "hash": "0xe97f9f08e110bebda42374e68365dbe231846f5bd0bc9ee1a21efbd175acba90", - "language": "Solidity 0.3.2", - "wasm": "0x0061736d0100000001350860027f7f0060000060047f7f7f7f017f60017f017f60047f7e7e7f0060087f7f7e7f7f7f7f7f017f60037f7f7f0060027f7f017f02960108057365616c310b6765745f73746f726167650002057365616c31097365616c5f63616c6c0005057365616c300b7365616c5f72657475726e0006057365616c320b7365745f73746f726167650002057365616c3007616464726573730000057365616c3005696e7075740000057365616c301176616c75655f7472616e73666572726564000003656e76066d656d6f727902011010030a090007030104040301010608017f01418080040b071102066465706c6f79000e0463616c6c000f0ac1a901095301017f410421020340200141036a20002d00003a0000200141026a20002d00013a0000200141016a20002d00023a0000200120002d00033a0000200041046a2100200141046b2101200241046b22020d000b0bb30201047f2000220241086a10092204200036020420042000360200200441086a210002402001417f4704402002450d01200241016b2002410771220304400340200020012d00003a0000200041016a2100200141016a2101200241016b2102200341016b22030d000b0b4107490d010340200020012d00003a0000200020012d00013a0001200020012d00023a0002200020012d00033a0003200020012d00043a0004200020012d00053a0005200020012d00063a0006200020012d00073a0007200041086a2100200141086a2101200241086b22020d000b0c010b2002450d00200241016b2002410771220104400340200041003a0000200041016a2100200241016b2102200141016b22010d000b0b4107490d00034020004200370000200041086a2100200241086b22020d000b0b20040b950101047f41808004210103400240200128020c0d00200128020822022000490d002002200041076a41787122026b220441184f0440200120026a41106a22002001280200220336020020030440200320003602040b2000200441106b3602082000410036020c2000200136020420012000360200200120023602080b2001410136020c200141106a0f0b200128020021010c000b000b2e00418080044100360200418480044100360200418c80044100360200418880043f00411074419080046b3602000b5001017e02402003450d00200341c00071044020012003413f71ad862102420021010c010b20022003ad220486200141c00020036bad88842102200120048621010b20002002370308200020013703000b5001017e02402003450d00200341c00071044020022003413f71ad882101420021020c010b200241c00020036bad8620012003ad220488842101200220048821020b20002002370308200020013703000bd22202207e257f230041b0016b222324000240024020002903402202200029030022047d2206200256200041c8006a2903002201200041086a29030022037d20022004542221ad7d220420015620012004511b200041d0006a2903002202200041106a29030022077d22082021200120035420012003511bad22037d2205200256200041d8006a2903002201200041186a2903007d2002200754ad7d2003200856ad7d220320015620012003511b2002200585200120038584501b450440202341206b222122222400202141186a420037030020214200370310202142003703082021420037030041980141203602002021412041a0014198011000212141a0012d0000212441a1012d0000212541a2012d0000212841a3012d0000212941a4012d0000212a41a5012d0000212b41a6012d0000212c41a7012d0000212741a8012d0000212d41a9012d0000212e41aa012d0000212f41ab012d0000213041ac012d0000213141ad012d0000213241ae012d0000213341af012d0000213441b0012d0000213541b1012d0000213641b2012d0000213741b3012d0000213841b4012d0000213941b5012d0000213a41b6012d0000213b41b7012d0000213c41b8012d0000213d41b9012d0000213e41ba012d0000213f41bb012d0000214041bc012d0000214141bd012d0000214241be012d0000214341bf012d0000214441c400417f10082126202341a69fc7be7c36020c2023410c6a202641086a22451007202641246a20033703002026411c6a2005370300202641146a20043703002026410c6a2006370300200041286a2903002101200041306a290300210220002903202103202641c4006a200041386a2903003703002026413c6a2002370300202641346a20013703002026412c6a200337030020234100204420211b3a002f20234100204320211b3a002e20234100204220211b3a002d20234100204120211b3a002c20234100204020211b3a002b20234100203f20211b3a002a20234100203e20211b3a002920234100203d20211b3a002820234100203c20211b3a002720234100203b20211b3a002620234100203a20211b3a002520234100203920211b3a002420234100203820211b3a002320234100203720211b3a002220234100203620211b3a002120234100203520211b3a002020234100203420211b3a001f20234100203320211b3a001e20234100203220211b3a001d20234100203120211b3a001c20234100203020211b3a001b20234100202f20211b3a001a20234100202e20211b3a001920234100202d20211b3a001820234100202720211b3a001720234100202c20211b3a001620234100202b20211b3a001520234100202a20211b3a001420234100202920211b3a001320234100202820211b3a001220234100202520211b3a001120234100202420211b3a00102026280200212441980141808002360200202241106b2221240020214200370308202142003703004100202341106a4200202120452024410020261b41a00141980110012221450d0220214102470d01410141980128020041a0011008220041086a2000280200410020001b1002000b4101413041241002000b4101410041001002000b41980128020041a00110082221280200410020211b2226411f4d04404101410041241002000b41980128020041a00110082121202641204d044002400240202141206a2903002203200041186a2903002201852003200320017d202141186a2903002204200041106a290300220154ad7d200420017d221c202141086a29030022192000290300221d54222b202141106a2903002214200041086a290300221a542014201a511bad221e54ad7d22158583420059044020192201200029030056200041086a22212903002205201422025420022005511b2004200041106a22262903002206562003200041186a222229030022055620032005511b2004200685200320058584501b450440202229030021032026290300210420212903002102200029030021010b202341e8006a4200370300202341c8006a2003370300202342003703602023420037035820234290ce00370350202320013703302023200237033820232004370340202341306a22222c001f2228410048044020224200202229030022027d370300202241086a220042002000290300220120024200522200ad7c7d370300202241106a22214200202129030022027d2203200020014200522001501bad22017d370300202241186a220042002001200356ad20002903002002420052ad7c7c7d3703000b202341d0006a22242c001f222c410048044020244200202429030022027d370300202441086a220042002000290300220120024200522200ad7c7d370300202441106a22214200202129030022027d2203200020014200522001501bad22017d370300202441186a220042002001200356ad20002903002002420052ad7c7c7d3703000b202341f0006a212120234190016a212641012129230041f0006b22002400202241186a2903002103202241106a2903002105202241086a290300210420222903002106027f02402024290300220b420156202441086a29030022084200522008501b202441106a290300220c420052202441186a2903002207420052200750222a1b2007200c84501b4504404101200ba741016b0d021a202142003703102021420037030820214200370300202141186a4200370300202620053703102026200637030020262004370308202641186a20033703000c010b2005200c8522012006200b85842003200785220220042008858484500440202142003703102021420037030820214200370300202141186a420037030020264200370310202641186a420037030020264201370300202642003703080c010b200520068420032004848442002006200b5a200420085a20042008511b2005200c5a200320075a20032007511b2001200284501b1b500440202120063703002021200437030820212005370310202141186a200337030020264200370310202641186a420037030020264200370300202642003703080c010b41c0012122027f024020032201502227450d004180012122200522014200520d0041c0002122200422014200520d004100222220062201500d011a0b2022411f413f20014280808080105422241b222541106b20252001422086200120241b220142808080808080c0005422241b222541086b20252001421086200120241b2201428080808080808080015422241b222541046b20252001420886200120241b2201428080808080808080105422241b222541026b20252001420486200120241b2201428080808080808080c0005422241b6a2001420286200120241b423f87a7417f736a0b212241c001212420072101200041306a200b20084180012022027f0240202a450d004180012124200c22014200520d0041c0002124200822014200520d0041002224200b2201500d011a0b2024411f413f20014280808080105422221b222541106b20252001422086200120221b220142808080808080c0005422221b222541086b20252001421086200120221b2201428080808080808080015422221b222541046b20252001420886200120221b2201428080808080808080105422221b222541026b20252001420486200120221b2201428080808080808080c0005422221b6a2001420286200120221b423f87a7417f736a0b6b22226b100c200041e0006a200c20072022100b200041406b200b200820224180016b100b200041d0006a200b20082022100b41c001212420032101200041e8006a290300200041386a29030084200041c8006a29030020224180014922251b200720221b210d2000290360200029033084200029034020251b200c20221b210a200041d8006a290300420020251b210e2000290350420020251b210f41c001212220072102200041106a42014200027f02402027450d004180012124200522014200520d0041c0002124200422014200520d004100222420062201500d011a0b2024411f413f20014280808080105422251b222741106b20272001422086200120251b220142808080808080c0005422251b222741086b20272001421086200120251b2201428080808080808080015422251b222741046b20272001420886200120251b2201428080808080808080105422251b222741026b20272001420486200120251b2201428080808080808080c0005422251b6a2001420286200120251b423f87a7417f736a0b027f0240202a450d004180012122200c22024200520d0041c0002122200822024200520d0041002222200b2202500d011a0b2022411f413f20024280808080105422241b222541106b20252002422086200220241b220142808080808080c0005422241b222541086b20252001421086200120241b2201428080808080808080015422241b222541046b20252001420886200120241b2201428080808080808080105422241b222541026b20252001420486200120241b2201428080808080808080c0005422241b6a2001420286200120241b423f87a7417f736a0b6b22224180016b100b20004201420041800120226b100c200041206a420142002022100b200a2006200f542004200e542004200e511b2005200a542003200d542003200d511b2005200a852003200d8584501b2225ad220988200d4201862025413f73ad220186842102200e420186200186200f20098884210f2000290300200029031020224180014922241b420020221b2210200988200041086a290300200041186a29030020241b420020221b2211420186200186842113200041286a290300420020241b22124201862001862000290320420020241b200988842116200a4201862025417f73413f71ad220186200e20098884210a2010420186200186201220098884210e200d2009882101201120098821094200210d42002110420021114200211203404200200a2006200f542004200a542004200a511b2002200556200120035620012003511b2002200585200120038584501b22221b21174200200f20221b211b4200200120221b211f20054200200220221b22185421244200200920221b20128421124200201320221b20118421114200200e20221b20108421104200201620221b200d84210d200e423f862016420188842116200a423f86200f42018884210f2013423f86200e42018884210e2002423f86200a42018884210a2009423f8620134201888421132001423f8620024201888421022009420188210920014201882101200520187d22182006201b542222200420175420042017511bad22207d21052006201b7d2206200b5a200420177d2022ad7d220420085a20042008511b2005200c5a2003201f7d2024ad7d2018202054ad7d220320075a20032007511b2005200c85200320078584501b0d000b2026200d3703002026201037030820262011370310202641186a201237030020212005370310202141186a200337030020212006370300202120043703080b41000b2122200041f0006a2400024020220d002028202c73410048044020264200202629030022027d370300202641086a220042002000290300220120024200522200ad7c7d370300202641106a22224200202229030022027d2203200020014200522001501bad22017d370300202641186a220042002001200356ad20002903002002420052ad7c7c7d3703000b41002129202841004e0d0020214200202129030022027d370300202141086a220042002000290300220120024200522200ad7c7d370300202141106a22264200202629030022027d2203200020014200522001501bad22017d370300202141186a220042002001200356ad20002903002002420052ad7c7c7d3703000b20290d012023290390012019201d7d542014201a7d202bad7d220120234198016a29030022025620012002511b201c201e7d2202202341a0016a2903002203562015202341a8016a29030022015520012015511b2002200385200120158584501b0d02202341b0016a240041000f0b4101413041241002000b410141e00041241002000b410141840141091002000b4101410041241002000b8c0602207f027e230041206b22002400100a4198014180800236020041a001419801100541940141980128020022013602002000411036020c200041106a2000410c6a100620002903102120200041186a2903002121230041406a22002400024002400240024002400240200141034d0d0041900141a0012802002202360200200241c28795d17b470d00202020218450450d01200141046b220220014b22032003720d052002411f4d0d022001200141046b2202490d05200241204b0d0341c3012d0000210141c2012d0000210241c1012d0000210341c0012d0000210441bf012d0000210541be012d0000210641bd012d0000210741bc012d0000210841bb012d0000210941ba012d0000210a41b9012d0000210b41b8012d0000210c41b7012d0000210d41b6012d0000210e41b5012d0000210f41b4012d0000211041b3012d0000211141b2012d0000211241b1012d0000211341b0012d0000211441af012d0000211541ae012d0000211641ad012d0000211741ac012d0000211841ab012d0000211941aa012d0000211a41a9012d0000211b41a8012d0000211c41a7012d0000211d41a6012d0000211e41a4012d0000211f200041a5012d00003a00012000201f3a00002000201e3a00022000201d3a00032000201c3a00042000201b3a00052000201a3a0006200020193a0007200020183a0008200020173a0009200020163a000a200020153a000b200020143a000c200020133a000d200020123a000e200020113a000f200020103a00102000200f3a00112000200e3a00122000200d3a00132000200c3a00142000200b3a00152000200a3a0016200020093a0017200020083a0018200020073a0019200020063a001a200020053a001b200020043a001c200020033a001d200020023a001e200020013a001f200041386a4200370300200042003703302000420037032820004200370320200041206a41202000412010031a0c040b4101410041001002000b4101410041001002000b4101410041241002000b4101410041241002000b41004100417f100841086a41001002000b4101413041241002000beb7a02277f187e230041206b22012400100a4198014180800236020041a001419801100541940141980128020022033602002001411036020c200141106a2001410c6a10062001290310212d200141186a290300212e230041206b2206240002400240024002400240027e200341034d0d0141900141a0012802002201360200024002400240024002400240024002400240024002400240024002400240200141b5ebfeaa024c0440200141c0bbce5c4c0440200141df97e3d07b460d052001418f89b6e87d470d12202d202e84500d060c120b200141c1bbce5c460d01200141a589fec100470d11202d202e84500d060c110b200141adb4f4eb044c0440200141b6ebfeaa02460d02200141fe948eb802470d11202d202e84500d070c110b200141aeb4f4eb04460d02200141f1caa1ea0547202d202e84420052720d10200641206b220324004198014120360200200641186a42003703002006420037031020064200370308200642003703002006412041a0014198011000210141a0012d0000210041a1012d0000210641a2012d0000210241a3012d0000210441a4012d0000210541a5012d0000210741a6012d0000210841a7012d0000210941a8012d0000210a41a9012d0000210b41aa012d0000210c41ab012d0000210d41ac012d0000210e41ad012d0000210f41ae012d0000211041af012d0000211141b0012d0000211241b1012d0000211341b2012d0000211441b3012d0000211541b4012d0000211641b5012d0000211741b6012d0000211841b7012d0000211941b8012d0000211a41b9012d0000211b41ba012d0000211c41bb012d0000211d41bc012d0000211e41bd012d0000211f41be012d000021202003410041bf012d000020011b3a001f20034100202020011b3a001e20034100201f20011b3a001d20034100201e20011b3a001c20034100201d20011b3a001b20034100201c20011b3a001a20034100201b20011b3a001920034100201a20011b3a001820034100201920011b3a001720034100201820011b3a001620034100201720011b3a001520034100201620011b3a001420034100201520011b3a001320034100201420011b3a001220034100201320011b3a001120034100201220011b3a001020034100201120011b3a000f20034100201020011b3a000e20034100200f20011b3a000d20034100200e20011b3a000c20034100200d20011b3a000b20034100200c20011b3a000a20034100200b20011b3a000920034100200a20011b3a000820034100200920011b3a000720034100200820011b3a000620034100200720011b3a000520034100200520011b3a000420034100200420011b3a000320034100200220011b3a000220034100200620011b3a000120034100200020011b3a00000c0c0b202d202e844200520d0f200641206b22032400200341206b22012400200141206b22002400230041206b220624004198014120360200200641186a42003703002006420037031020064200370308200642013703002006412041a0014198011000047e42000541b001290300213041a801290300213741a001290300212b41b8012903000b2131200641206b22022400200241186a420037030020024200370310200242003703082002420237030041980141203602002002412041a0014198011000047e42000541b001290300212c41a801290300213241a001290300212841b8012903000b2133200241206b22022400200241186a420037030020024200370310200242003703082002420337030041980141203602002002412041a0014198011000047e42000541b001290300212741a801290300212941a001290300212a41b8012903000b212f2003202b3703002003203737030820032030370310200341186a22022031370300200141186a2204203337030020012028370300200120323703082001202c37031020002027370310200041186a2205202f3703002000202a37030020002029370308200641206a2400200341086a2903002127200341106a290300212a20022903002128200141086a2903002129200141106a290300212b2004290300212c200041086a2903002131200041106a29030021332005290300212f20032903002134200129030021302000290300213241e000417f1008220341e0006a202f370300200341d8006a2033370300200341d0006a2031370300200341c8006a2032370300200341406b202c370300200341386a202b370300200341306a2029370300200341286a2030370300200341206a2028370300200341186a202a370300200341106a2027370300200341086a220320343703004100200341e0001002000b202d202e844200520d0e200341046b220120034b22002000720d102001411f4d0d0f2003200341046b2201490d10200141204d0d060c0f0b202d202e844200520d0d200341046b220120034b22002000720d0f2001411f4d0d0e2003200341046b2201490d0f200141204d0d060c0e0b202d202e844200520d0c200341046b220120034b22002000720d0e2001411f4d0d0d2003200341046b2201490d0e200141204d0d070c0d0b200641206b220324004198014120360200200641186a42003703002006420037031020064200370308200642033703002006412041a0014198011000047e42000541b801290300212a41a801290300212841a001290300212741b0012903000b2129200320273703002003202837030820032029370310200341186a2201202a370300200341106a290300212820012903002127200341086a2903000c0a0b200341046b220120034b22002000720d0c2001413f4b04402003200341046b2201490d0d200141c0004d0d020c0c0b0c0b0b200341046b220120034b22002000720d0b2001411f4b04402003200341046b2201490d0c200141204d0d040c0b0b0c0a0b41dc01290300212b41d401290300212c41cc01290300213141c401290300213341bc01290300212741b401290300212a41ac01290300212841a4012903002129200641206b22032400027f230041e0006b220124004198014120360200200141306a4200370300200142003703282001420037032020014200370318200141186a412041a0014198011000210041a0012d0000210441a1012d0000210541a2012d0000210741a3012d0000210841a4012d0000210941a5012d0000210a41a6012d0000210b41a7012d0000210c41a8012d0000210d41a9012d0000210e41aa012d0000210f41ab012d0000211041ac012d0000211141ad012d0000211241ae012d0000211341af012d0000211441b0012d0000211541b1012d0000211641b2012d0000211741b3012d0000211841b4012d0000211941b5012d0000211a41b6012d0000211b41b7012d0000211c41b8012d0000211d41b9012d0000211e41ba012d0000211f41bb012d0000212041bc012d0000212141bd012d0000212241be012d0000212341bf012d0000212441c400417f10082102200141a69fc7be7c36023c2001413c6a200241086a22251007200241c4006a202b3703002002413c6a202c370300200241346a20313703002002412c6a2033370300200241246a20273703002002411c6a202a370300200241146a20283703002002410c6a202937030020014100202420001b3a005f20014100202320001b3a005e20014100202220001b3a005d20014100202120001b3a005c20014100202020001b3a005b20014100201f20001b3a005a20014100201e20001b3a005920014100201d20001b3a005820014100201c20001b3a005720014100201b20001b3a005620014100201a20001b3a005520014100201920001b3a005420014100201820001b3a005320014100201720001b3a005220014100201620001b3a005120014100201520001b3a005020014100201420001b3a004f20014100201320001b3a004e20014100201220001b3a004d20014100201120001b3a004c20014100201020001b3a004b20014100200f20001b3a004a20014100200e20001b3a004920014100200d20001b3a004820014100200c20001b3a004720014100200b20001b3a004620014100200a20001b3a004520014100200920001b3a004420014100200820001b3a004320014100200720001b3a004220014100200520001b3a004120014100200420001b3a0040200228020021004198014180800236020020014200370310200142003703084100200141406b4200200141086a20252000410020021b41a00141980110012200044020004102460d0d0c0a0b41980128020041a00110082200280200410020001b2202411f4d0d0a41980128020041a00110082100200241204d0440200041206a290300212f200041186a2903002134200041106a2903002130200041086a290300213241e00010092202203037030820022032370300200241306a202c370300200241286a2031370300200241206a203337030020022034370310200241386a202b370300200241186a202f370300027e02402029202920327c222c5622002000ad202820307c7c222b2028542028202b511b2200202a20347c22292000ad7c2228202a542028202954ad2029202a54ad2027202f7c7c7c222920275420272029511b2028202a85202720298584501b450440200241c8006a202b370300200241406b2205202c370300200241d0006a2028370300200241d8006a2029370300200141206b220024004200212a200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a2004420037030020004200370310200042003703082000420237030020004120200241206a412010031a20044200370300200042003703102000420037030820004203370300200041202005412010031a200041206b2200240041e00010092102200041186a2204420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d0142002129420021274200212842000c020b0c0e0b41b801290300212841a801290300212741a001290300212941b0012903000b212b20022029370300200220273703082002202b370310200241186a2028370300419801412036020020004200370310200442003703002000420237030020004200370308027e2000412041a00141980110000440420021294200212742000c010b41b001290300212741a801290300212941a001290300212a41b8012903000b2128200241286a2029370300200241206a202a370300200241306a2027370300200241386a202837030041980141203602004200212a20004200370310200041186a42003703002000420337030020004200370308027e2000412041a00141980110000440420021294200212742000c010b41b001290300212741a801290300212941a001290300212a41b8012903000b2128200241c8006a2029370300200241406b202a370300200241d0006a2027370300200241d8006a20283703002002100d22000440200141e0006a240020000c020b419801412036020041a001419801100441a001290300212741a801290300212a41b0012903002128200341b801290300370018200320283700102003202a37000820032027370000200141e0006a240041000c010b0c0a0b450d040c050b41bc01290300212f41b401290300212c41ac01290300212d41a4012903002138200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b801290300212941a801290300213241a001290300213041b0012903000b212e200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300213141a801290300212841a001290300212741b8012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b001290300213441a801290300212b41a001290300213341b8012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f10082102200141eba490d40736022c2001412c6a200241086a2226100720024184016a202f370300200241fc006a202c370300200241f4006a202d370300200241ec006a2038370300200241e4006a2035370300200241dc006a2034370300200241d4006a202b370300200241cc006a2033370300200241c4006a20363703002002413c6a2031370300200241346a20283703002002412c6a2027370300200241246a20293703002002411c6a202e370300200241146a20323703002002410c6a203037030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d0c0c090b41980128020041a00110082202280200410020021b2204411f4d0d0941980128020041a00110082102200441204b0d094200212b0240027e0240202f200241206a290300223085202f202f20307d202c200241186a290300223254ad7d202c20327d22272038200241086a290300222e542204202d200241106a290300222c54202c202d511bad223354ad7d223585834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021294200212842000c020b0c020b41b801290300212841a801290300212941a001290300212b41b0012903000b2139202d202c7d2004ad200041206b2200240042002134200041186a42003703002000420037031020004200370308200042023703004198014120360200027e2000412041a001419801100004404200213142000c010b41b001290300212a41a801290300213141a001290300213741b8012903000b212f202720337d213a7d21362038202e7d2138200041206b22002400200041186a42003703002000420037031020004200370308200042033703004198014120360200027e2000412041a00141980110000440420021334200212742000c010b41b801290300212741a801290300213341a001290300213441b0012903000b212d41e0001009210220282035852028202820357d2039203a54ad7d2039203a7d2235202b2038542204202920365420292036511bad223954ad7d223a85834200530d002002202b20387d3703002002202920367d2004ad7d3703082002203520397d370310200241186a203a3703002037202e20377c22385622042004ad202c20317c7c222b203154202b2031511b2204202a20327c22292004ad7c2228202a542028202954ad2029202a54ad202f20307c7c7c2229202f542029202f511b2028202a852029202f8584501b0d00200241286a202b370300200241206a22052038370300200241306a2028370300200241386a2029370300027e0240202e20347c222b20345422042004ad202c20337c7c222920335420292033511b2204202d20327c22282004ad7c222a202d542028202a56ad2028202d54ad202720307c7c7c222820275420272028511b202a202d85202720288584501b450440200241c8006a2029370300200241406b2207202b370300200241d0006a202a370300200241d8006a2028370300200041206b220024004200212a200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a2204420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d0142002128420021274200212942000c020b0c020b41b801290300212941b001290300212741a001290300212841a8012903000b212b200220283703002002202b37030820022027370310200241186a2029370300419801412036020020004200370310200442003703002000420237030020004200370308027e2000412041a00141980110000440420021284200212742000c010b41b801290300212741a801290300212841a001290300212a41b0012903000b2129200241286a2028370300200241206a202a370300200241306a2029370300200241386a202737030041980141203602004200212a20004200370310200041186a42003703002000420337030020004200370308027e2000412041a00141980110000440420021284200212742000c010b41b801290300212741a801290300212841a001290300212a41b0012903000b2129200241c8006a2028370300200241406b202a370300200241d0006a2029370300200241d8006a20273703002002100d22000440200141d0006a240020000c020b2003202e3703002003202c37030820032032370310200341186a2030370300200141d0006a240041000c010b0c0a0b450d050c040b41bc01290300213741b401290300212d41ac01290300213441a401290300212e200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b001290300212741a801290300212f41a001290300212c41b8012903000b2138200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300212a41a801290300213041a001290300212b41b8012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b801290300212841a801290300213241a001290300212941b0012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f10082102200141e587b1c37936022c2001412c6a200241086a2226100720024184016a2037370300200241fc006a202d370300200241f4006a2034370300200241ec006a202e370300200241e4006a2028370300200241dc006a2035370300200241d4006a2032370300200241cc006a2029370300200241c4006a20363703002002413c6a202a370300200241346a20303703002002412c6a202b370300200241246a20383703002002411c6a2027370300200241146a202f3703002002410c6a202c37030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d0b0c080b41980128020041a00110082202280200410020021b2204411f4d0d0841980128020041a00110082102200441204b0d08420021280240027e0240200241206a29030022322037852032203220377d200241186a2903002239202d54ad7d2039202d7d222c200241086a290300223a202e542204200241106a290300223820345420342038511bad223054ad7d223b85834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d014200212942000c020b0c020b41b801290300212941a801290300213341a001290300212841b0012903000b213c2004ad2135200041206b220024004200212a200041186a42003703002000420037031020004200370308200042023703004198014120360200027e2000412041a001419801100004404200212b4200212f4200212742000c010b41b801290300212741b001290300212f41a801290300212b41a0012903000b2136202c20307d213d203820347d20357d2135203a202e7d213e200041206b22002400200041186a42003703002000420037031020004200370308200042033703004198014120360200027e2000412041a001419801100004404200212c42000c010b41b001290300213141a801290300212c41a001290300212a41b8012903000b213041e000100921022029203b8520292029203b7d203c203d54ad7d203c203d7d223b2028203e542204203320355420332035511bad223c54ad7d223d85834200530d0020022028203e7d3703002002203320357d2004ad7d3703082002203b203c7d370310200241186a203d3703002036202e7d2233203656202b20347d202e2036562204ad7d2229202b562029202b511b202f202d7d22282004202b203454202b2034511bad22367d222b202f56202720377d202d202f56ad7d2028203654ad7d222820275620272028511b202b202f85202720288584501b0d00200241286a2029370300200241206a22052033370300200241306a202b370300200241386a2028370300027e0240202a202e7d2229202a56202c20347d202a202e542204ad7d222a202c56202a202c511b2031202d7d22272004202c203454202c2034511bad222b7d2228203156203020377d202d203156ad7d2027202b54ad7d222720305620272030511b2028203185202720308584501b450440200241c8006a202a370300200241406b22072029370300200241d0006a2028370300200241d8006a2027370300200041206b2200240042002128200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a2204420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021274200212a4200212b42000c020b0c020b41b801290300212b41b001290300212a41a001290300212741a8012903000b212920022027370300200220293703082002202a370310200241186a202b370300419801412036020020004200370310200442003703002000420237030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b801290300212a41a801290300212741a001290300212841b0012903000b2129200241286a2027370300200241206a2028370300200241306a2029370300200241386a202a37030041980141203602004200212820004200370310200041186a42003703002000420337030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b801290300212a41a801290300212741a001290300212841b0012903000b2129200241c8006a2027370300200241406b2028370300200241d0006a2029370300200241d8006a202a3703002002100d22000440200141d0006a240020000c020b2003203a3703002003203837030820032039370310200341186a2032370300200141d0006a240041000c010b0c090b450d040c030b41bc01290300213141b401290300213341ac01290300212841a401290300212d200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b001290300212741a801290300212f41a001290300212c41b8012903000b212e200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300212a41a801290300213741a001290300212b41b8012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b801290300213241a801290300212941a001290300213041b0012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f10082102200141b8f9f2910636022c2001412c6a200241086a2226100720024184016a2031370300200241fc006a2033370300200241f4006a2028370300200241ec006a202d370300200241e4006a2032370300200241dc006a2035370300200241d4006a2029370300200241cc006a2030370300200241c4006a20363703002002413c6a202a370300200241346a20373703002002412c6a202b370300200241246a202e3703002002411c6a2027370300200241146a202f3703002002410c6a202c37030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d0a0c070b41980128020041a00110082202280200410020021b2204411f4d0d0741980128020041a00110082102200441204b0d074200212a0240027e0240200241206a29030022302031852030203020317d200241186a2903002236203354ad7d203620337d222b200241086a2903002235202d542204200241106a290300223220285420282032511bad222c54ad7d223985834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d014200212f4200212742000c020b0c020b41b801290300212741a801290300212f41a001290300212a41b0012903000b213a2004ad212e200041206b2200240042002129200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b001290300213d41a801290300213841a001290300213441b8012903000b213e202b202c7d213b203220287d202e7d212e2035202d7d213c200041206b22002400200041186a42003703002000420037031020004200370308200042033703004198014120360200027e2000412041a001419801100004404200212b4200212c42000c010b41b801290300212c41b001290300212b41a001290300212941a8012903000b213741e0001009210220272039852027202720397d203a203b54ad7d203a203b7d2239202a203c542204202e202f56202e202f511bad223a54ad7d223b85834200530d002002202a203c7d370300200241286a2038370300200241206a220520343703002002202f202e7d2004ad7d370308200241306a203d37030020022039203a7d370310200241386a203e370300200241186a203b370300027e024020292029202d7c22295622042004ad202820377c7c222820375420282037511b2204202b20337c222a2004ad7c2227202b542027202a54ad202a202b54ad202c20317c7c7c222a202c54202a202c511b2027202b85202a202c8584501b450440200241c8006a2028370300200241406b22072029370300200241d0006a2027370300200241d8006a202a370300200041206b2200240042002128200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021274200212a4200212b42000c020b0c020b41b801290300212b41a801290300212a41a001290300212741b0012903000b2129200220273703002002202a37030820022029370310200241186a202b370300419801412036020020004200370310200041186a220442003703002000420237030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b001290300212a41a801290300212741a001290300212841b8012903000b2129200241286a2027370300200241206a2028370300200241306a202a370300200241386a202937030041980141203602004200212820004200370310200442003703002000420337030020004200370308027e2000412041a00141980110000440420021274200212a42000c010b41b001290300212a41a801290300212741a001290300212841b8012903000b2129200241c8006a2027370300200241406b2028370300200241d0006a202a370300200241d8006a20293703002002100d22000440200141d0006a240020000c020b200320353703002003203237030820032036370310200341186a2030370300200141d0006a240041000c010b0c080b450d030c020b41bc01290300212b41b401290300212d41ac01290300212c41a401290300212e200641206b22032400027f230041d0006b220124004198014120360200200141206a4200370300200142003703182001420037031020014203370308200141086a412041a0014198011000047e42000541b801290300212841b001290300212741a001290300213841a8012903000b212f200141206b22002400200041186a420037030020004200370310200042003703082000420237030041980141203602002000412041a0014198011000047e42000541b801290300213341a801290300213141a001290300213441b0012903000b2136200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000047e42000541b001290300213741a801290300213241a001290300213041b8012903000b2135200041206b220022042400200041186a420037030020004200370310200042003703082000420037030041980141203602002000412041a0014198011000210041a0012d0000210541a1012d0000210741a2012d0000210841a3012d0000210941a4012d0000210a41a5012d0000210b41a6012d0000210c41a7012d0000210d41a8012d0000210e41a9012d0000210f41aa012d0000211041ab012d0000211141ac012d0000211241ad012d0000211341ae012d0000211441af012d0000211541b0012d0000211641b1012d0000211741b2012d0000211841b3012d0000211941b4012d0000211a41b5012d0000211b41b6012d0000211c41b7012d0000211d41b8012d0000211e41b9012d0000211f41ba012d0000212041bb012d0000212141bc012d0000212241bd012d0000212341be012d0000212441bf012d00002125418401417f100821022001418f84aaa77836022c2001412c6a200241086a2226100720024184016a202b370300200241fc006a202d370300200241f4006a202c370300200241ec006a202e370300200241e4006a2035370300200241dc006a2037370300200241d4006a2032370300200241cc006a2030370300200241c4006a20333703002002413c6a2036370300200241346a20313703002002412c6a2034370300200241246a20283703002002411c6a2027370300200241146a202f3703002002410c6a203837030020014100202520001b3a004f20014100202420001b3a004e20014100202320001b3a004d20014100202220001b3a004c20014100202120001b3a004b20014100202020001b3a004a20014100201f20001b3a004920014100201e20001b3a004820014100201d20001b3a004720014100201c20001b3a004620014100201b20001b3a004520014100201a20001b3a004420014100201920001b3a004320014100201820001b3a004220014100201720001b3a004120014100201620001b3a004020014100201520001b3a003f20014100201420001b3a003e20014100201320001b3a003d20014100201220001b3a003c20014100201120001b3a003b20014100201020001b3a003a20014100200f20001b3a003920014100200e20001b3a003820014100200d20001b3a003720014100200c20001b3a003620014100200b20001b3a003520014100200a20001b3a003420014100200920001b3a003320014100200820001b3a003220014100200720001b3a003120014100200520001b3a00302002280200210541980141808002360200200441106b2200240020004200370308200042003703004100200141306a4200200020262005410020021b41a00141980110012202044020024102460d090c060b41980128020041a00110082202280200410020021b2204411f4d0d0641980128020041a00110082102200441204b0d06420021330240027e0240200241206a290300222f202b85202f202f202b7d200241186a2903002230202d54ad7d2030202d7d222d200241086a2903002232202e542204200241106a290300222b202c54202b202c511bad223754ad7d223685834200590440200041206b22002400200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d01420021284200213142000c020b0c020b41b801290300213141a801290300212841a001290300213341b0012903000b2135202b202c7d2004ad200041206b2200240042002127200041186a42003703002000420037031020004200370308200042023703004198014120360200027e2000412041a0014198011000044042002134420021384200212c42000c010b41b001290300212c41a801290300213841a001290300213441b8012903000b213b202d20377d21397d21372032202e7d212e200041206b22002400200041186a420037030020004200370310200042003703082000420337030041980141203602002000412041a0014198011000047e42000541b001290300212a41a801290300212941a001290300212741b8012903000b212d41e0001009210220312036852031203120367d2035203954ad7d203520397d2236202e2033562204202820375420282037511bad223554ad7d223985834200530d0020022033202e7d370300200241286a2038370300200241206a220520343703002002202820377d2004ad7d370308200241306a202c3703002002203620357d370310200241386a203b370300200241186a2039370300027e0240202720327d222c2027562029202b7d20272032542204ad7d222820295620282029511b202a20307d222720042029202b542029202b511bad22317d2229202a56202d202f7d202a203054ad7d2027203154ad7d2227202d562027202d511b2029202a852027202d8584501b450440200241c8006a2028370300200241406b2207202c370300200241d0006a2029370300200241d8006a2027370300200041206b2200240042002129200041186a22044200370300200042003703102000420037030820004201370300200041202002412010031a20044200370300200042003703102000420037030820004202370300200041202005412010031a20044200370300200042003703102000420037030820004203370300200041202007412010031a200041206b2200240041e00010092102200041186a420037030020004200370310200042003703082000420137030041980141203602002000412041a0014198011000450d014200212a420021274200212842000c020b0c020b41b801290300212841b001290300212741a001290300212a41a8012903000b212c2002202a3703002002202c37030820022027370310200241186a2028370300419801412036020020004200370310200041186a220442003703002000420237030020004200370308027e2000412041a001419801100004404200212a4200212742000c010b41b801290300212741a801290300212a41a001290300212941b0012903000b2128200241286a202a370300200241206a2029370300200241306a2028370300200241386a202737030041980141203602004200212920004200370310200442003703002000420337030020004200370308027e2000412041a001419801100004404200212a4200212742000c010b41b801290300212741a801290300212a41a001290300212941b0012903000b2128200241c8006a202a370300200241406b2029370300200241d0006a2028370300200241d8006a20273703002002100d22000440200141d0006a240020000c020b200320323703002003202b37030820032030370310200341186a202f370300200141d0006a240041000c010b0c070b450d020c010b200329000021272003290008212a20032900102128200329001821294120417f1008220341206a2029370000200341186a2028370000200341106a202a370000200341086a220320273700004100200341201002000b200641206a24000c060b200341106a2903002128200341186a2903002127200341086a2903000b212a200329030021294120417f1008220341206a2027370300200341186a2028370300200341106a202a370300200341086a220320293703004100200341201002000b4101410041001002000b4101410041241002000b4101413041241002000b410141980128020041a0011008220341086a2003280200410020031b1002000b000b0b2e040041000b044e487b710041300b054e487b71110041e0000b054e487b7112004184010b0908c379a0104f686f68008e010970726f64756365727302086c616e6775616765010143000c70726f6365737365642d62790105636c616e676131352e302e34202868747470733a2f2f6769746875622e636f6d2f736f6c616e612d6c6162732f6c6c766d2d70726f6a6563742e676974203333633336323963616135396235396438663538353733366134613531393461613965393337376429" - }, - "spec": { - "constructors": [ - { - "args": [ - { - "label": "_curve", - "type": { - "displayName": [ - "ink_primitives", - "types", - "AccountId" - ], - "type": 2 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "new", - "payable": false, - "returnType": null, - "selector": "0xc24325ba" - } - ], - "docs": [ - "Stateful mock AMM to test the slippage curve." - ], - "environment": { - "accountId": { - "displayName": [ - "AccountId" - ], - "type": 2 - }, - "balance": { - "displayName": [ - "Balance" - ], - "type": 6 - }, - "blockNumber": { - "displayName": [ - "BlockNumber" - ], - "type": 7 - }, - "chainExtension": { - "displayName": [], - "type": 0 - }, - "hash": { - "displayName": [ - "Hash" - ], - "type": 8 - }, - "maxEventTopics": 4, - "timestamp": { - "displayName": [ - "Timestamp" - ], - "type": 7 - } - }, - "events": [], - "lang_error": { - "displayName": [ - "SolidityError" - ], - "type": 12 - }, - "messages": [ - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "curve", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink_primitives", - "types", - "AccountId" - ], - "type": 2 - }, - "selector": "0x7165485d" - }, - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "state", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "VendingMachine", - "state", - "return_type" - ], - "type": 5 - }, - "selector": "0xc19d93fb" - }, - { - "args": [ - { - "label": "_reserves", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - }, - { - "label": "_liabilities", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "init", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "ink_primitives", - "types", - "AccountId" - ], - "type": 2 - }, - "selector": "0xa5843f08" - }, - { - "args": [ - { - "label": "_amount", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "deposit", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0xb6b55f25" - }, - { - "args": [ - { - "label": "_liabilities", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "withdraw", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0x2e1a7d4d" - }, - { - "args": [ - { - "label": "_amount", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "swapInto", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0x7e8a0327" - }, - { - "args": [ - { - "label": "_amount", - "type": { - "displayName": [ - "uint256" - ], - "type": 3 - } - } - ], - "default": false, - "docs": [ - "" - ], - "label": "swapOutOf", - "mutates": true, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0xdfcb18ba" - }, - { - "args": [], - "default": false, - "docs": [ - "" - ], - "label": "totalReserves", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "uint256" - ], - "type": 3 - }, - "selector": "0x8f840ddd" - } - ] - }, - "storage": { - "struct": { - "fields": [ - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 1 - } - }, - "name": "" - } - ], - "name": "AccountId" - } - }, - "root_key": "0x00000000" - } - }, - "name": "curve" - }, - { - "layout": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x00000001", - "ty": 3 - } - }, - "name": "accumulatedSlippage" - }, - { - "layout": { - "leaf": { - "key": "0x00000001", - "ty": 3 - } - }, - "name": "liabilities" - }, - { - "layout": { - "leaf": { - "key": "0x00000001", - "ty": 3 - } - }, - "name": "reserves" - } - ], - "name": "State" - } - }, - "root_key": "0x00000001" - } - }, - "name": "state" - } - ], - "name": "VendingMachine" - } - }, - "types": [ - { - "id": 0, - "type": { - "def": { - "primitive": "u8" - }, - "path": [ - "uint8" - ] - } - }, - { - "id": 1, - "type": { - "def": { - "array": { - "len": 32, - "type": 0 - } - } - } - }, - { - "id": 2, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 1 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "AccountId" - ] - } - }, - { - "id": 3, - "type": { - "def": { - "primitive": "u256" - }, - "path": [ - "uint256" - ] - } - }, - { - "id": 4, - "type": { - "def": { - "composite": { - "fields": [ - { - "name": "accumulatedSlippage", - "type": 3 - }, - { - "name": "liabilities", - "type": 3 - }, - { - "name": "reserves", - "type": 3 - } - ] - } - }, - "path": [ - "State" - ] - } - }, - { - "id": 5, - "type": { - "def": { - "tuple": [ - 3, - 3, - 3 - ] - }, - "path": [ - "VendingMachine", - "state", - "return_type" - ] - } - }, - { - "id": 6, - "type": { - "def": { - "primitive": "u128" - }, - "path": [ - "uint128" - ] - } - }, - { - "id": 7, - "type": { - "def": { - "primitive": "u64" - }, - "path": [ - "uint64" - ] - } - }, - { - "id": 8, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 1 - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "Hash" - ] - } - }, - { - "id": 9, - "type": { - "def": { - "primitive": "str" - }, - "path": [ - "string" - ] - } - }, - { - "id": 10, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 9 - } - ] - } - }, - "path": [ - "0x08c379a0" - ] - } - }, - { - "id": 11, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 3 - } - ] - } - }, - "path": [ - "0x4e487b71" - ] - } - }, - { - "id": 12, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 10 - } - ], - "index": 0, - "name": "Error" - }, - { - "fields": [ - { - "type": 11 - } - ], - "index": 1, - "name": "Panic" - } - ] - } - }, - "path": [ - "SolidityError" - ] - } - } - ], - "version": "4" -} \ No newline at end of file diff --git a/nabla/_config_precompiledCurve.json b/nabla/_config_precompiledCurve.json deleted file mode 100644 index 0cd1db1..0000000 --- a/nabla/_config_precompiledCurve.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "contracts": { - "Router": { - "repository": "nablaContracts", - "path": "contracts/src/core/Router.sol" - }, - "NablaCurve": { - "path": "NablaCurve.contract", - "isPrecompiled": true - }, - "BackstopPool": { - "repository": "nablaContracts", - "path": "contracts/src/core/BackstopPool.sol" - }, - "SwapPool": { - "repository": "nablaContracts", - "path": "contracts/src/core/SwapPool.sol" - }, - "ERC20Wrapper": { - "repository": "pendulumWrappers", - "path": "erc20-wrapper/ERC20Wrapper.sol" - }, - "PriceOracleWrapper": { - "repository": "pendulumWrappers", - "path": "price-oracle-wrapper/PriceOracleWrapper.sol" - }, - "TestableBackstopPool": { - "repository": "nablaContracts", - "path": "contracts/test/lib/TestableBackstopPool.sol" - }, - "TestableSwapPool": { - "repository": "nablaContracts", - "path": "contracts/test/lib/TestableSwapPool.sol" - }, - "MockERC20": { - "repository": "nablaContracts", - "path": "contracts/src/mock/MockERC20.sol" - }, - "MockOracle": { - "repository": "nablaContracts", - "path": "contracts/src/mock/MockOracle.sol" - }, - "VendingMachine": { - "path": "VendingMachine.contract", - "isPrecompiled": true - } - }, - "repositories": { - "nablaContracts": { - "git": "https://github.com/NablaFinance/contracts.git", - "branch": "feature/backstop-pool-coverage-ratio", - "init": "yarn", - "importpaths": ["contracts/@chain/pendulum", "node_modules"] - }, - "pendulumWrappers": { - "git": "https://github.com/pendulum-chain/pendulum-ink-wrapper", - "branch": "master" - } - }, - "networks": { - "foucoco": { - "namedAccounts": { - "deployer": "6iFKMtX29zYoHRgDkPTXKuRsHRbJ3Gnaxyc4dRrZTANHvZi3" - }, - "rpcUrl": "wss://rpc-foucoco.pendulumchain.tech:443" - }, - "local": { - "namedAccounts": { - "deployer": { - "address": "6mfqoTMHrMeVMyKwjqomUjVomPMJ4AjdCm1VReFtk7Be8wqr", - "suri": "//Alice" - }, - "bob": { - "address": "6k6gXPB9idebCxqSJuqpjPaqfYLQbdLHhvsANH8Dg8GQN3tT", - "suri": "//Bob" - }, - "root": { - "address": "6hc7e55FaBEbQAHB7hFFU39CPvcrsW7QhM3Qv15S9cWjkK6t", - "suri": "//AltoParaíso" - } - }, - "rpcUrl": "ws://127.0.0.1:9944" - } - }, - "tests": { - "tester": "deployer", - "root": "root" - }, - "buildFolder": "../target", - "limits": { - "gas": { - "refTime": "100000000000", - "proofSize": "10000000" - }, - "storageDeposit": "10000000000000" - } -} diff --git a/nabla/_lib.ts b/nabla/_lib.ts index 578abc8..ad9d4dc 100644 --- a/nabla/_lib.ts +++ b/nabla/_lib.ts @@ -21,29 +21,57 @@ export async function registerSwapPool( insuranceFeeBps: number = 0 ) { const registerWithRouter = await deployments.execute("router", tx, "registerPool", tokenAddr, swapPoolAddr); - const registerWithBackstop = await deployments.execute("backstop", tx, "addSwapPool", swapPoolAddr, insuranceFeeBps); return [registerWithRouter, registerWithBackstop]; } -export async function setPoolCap(deployments: DeploymentsExtension, tx: TxOptions, swapPool: string, poolCap: bigint) { - await deployments.execute(swapPool, tx, "setPoolCap", poolCap); +export async function setSwapFees( + deployments: DeploymentsExtension, + tx: TxOptions, + /// Deployment name + swapPool: string, + /// in 1/100 of basis points (0.0001%) + lpFee: number, + /// in 1/100 of basis points (0.0001%) + backstopFee: number, + /// in 1/100 of basis points (0.0001%) + protocolFee: number +) { + return await deployments.execute(swapPool, tx, "setSwapFees", lpFee, backstopFee, protocolFee); } -export async function setSwapFees( +export async function setInsuranceWithdrawalTimelock( deployments: DeploymentsExtension, tx: TxOptions, /// Deployment name swapPool: string, - /// in basis points (0.01%) - lpFeeBps: number, - /// in basis points (0.01%) - backstopFeeBps: number, - /// in basis points (0.01%) - protocolFeeBps: number + /// timelock in blocks + blocks: number +) { + return await deployments.execute(swapPool, tx, "setInsuranceWithdrawalTimelock", blocks); +} + +export async function setPoolCap( + deployments: DeploymentsExtension, + tx: TxOptions, + /// Deployment name + pool: string, + /// timelock in blocks + maxTokens: bigint +) { + return await deployments.execute(pool, tx, "setPoolCap", maxTokens); +} + +export async function setMaxCoverageRatio( + deployments: DeploymentsExtension, + tx: TxOptions, + /// Deployment name + pool: string, + /// timelock in blocks + maxCoverageRatio: bigint ) { - return await deployments.execute(swapPool, tx, "setSwapFees", lpFeeBps, backstopFeeBps, protocolFeeBps); + return await deployments.execute(pool, tx, "setMaxCoverageRatioForSwapIn", maxCoverageRatio); } // A quick hack to hopefully not crash the deployment procedure anymore after the diff --git a/nabla/config.json b/nabla/config.json index 3e7c614..9e10094 100644 --- a/nabla/config.json +++ b/nabla/config.json @@ -1,9 +1,5 @@ { "contracts": { - "TestableERC20Wrapper": { - "repository": "pendulumWrappers", - "path": "testable-erc20-wrapper/TestableERC20Wrapper.sol" - }, "Router": { "repository": "nablaContracts", "path": "contracts/src/core/Router.sol", @@ -58,28 +54,6 @@ "getAnyAssetPrice": false, "getAnyAsset": false } - }, - "TestableBackstopPool": { - "repository": "nablaContracts", - "path": "contracts/test/lib/TestableBackstopPool.sol", - "messageNameOverwrites": { - "decimals_": "decimals" - } - }, - "TestableSwapPool": { - "repository": "nablaContracts", - "path": "contracts/test/lib/TestableSwapPool.sol", - "messageNameOverwrites": { - "decimals_": "decimals" - } - }, - "MockOracle": { - "repository": "nablaContracts", - "path": "contracts/src/mock/MockOracle.sol" - }, - "VendingMachine": { - "repository": "nablaCurve", - "path": "test/util/VendingMachine.sol" } }, "repositories": { @@ -91,7 +65,7 @@ }, "nablaCurve": { "git": "https://github.com/NablaFinance/curve.git", - "branch": "3-change-slippage-curve", + "branch": "main", "init": "npm" }, "pendulumWrappers": { @@ -100,6 +74,12 @@ } }, "networks": { + "pendulum": { + "namedAccounts": { + "deployer": "6brtrQNiDYnte7oan4y3UUCJ3Ci9sK8k5cGjiHwKdVnz9KZ2" + }, + "rpcUrl": "wss://rpc-pendulum.prd.pendulumchain.tech:443" + }, "foucoco": { "namedAccounts": { "deployer": "6iFKMtX29zYoHRgDkPTXKuRsHRbJ3Gnaxyc4dRrZTANHvZi3" @@ -111,14 +91,6 @@ "deployer": { "address": "6mfqoTMHrMeVMyKwjqomUjVomPMJ4AjdCm1VReFtk7Be8wqr", "suri": "//Alice" - }, - "bob": { - "address": "6k6gXPB9idebCxqSJuqpjPaqfYLQbdLHhvsANH8Dg8GQN3tT", - "suri": "//Bob" - }, - "root": { - "address": "6hc7e55FaBEbQAHB7hFFU39CPvcrsW7QhM3Qv15S9cWjkK6t", - "suri": "//AltoParaíso" } }, "rpcUrl": "ws://127.0.0.1:9944" @@ -132,8 +104,8 @@ "limits": { "gas": { "refTime": "10000000000000000", - "proofSize": "100000000000000" + "proofSize": "10000000000000000" }, - "storageDeposit": "10000000000000" + "storageDeposit": "2300000000000" } } diff --git a/nabla/deploy/01_deploy_router.ts b/nabla/deploy/01_deploy_router.ts index 490ce9d..a906587 100644 --- a/nabla/deploy/01_deploy_router.ts +++ b/nabla/deploy/01_deploy_router.ts @@ -1,8 +1,12 @@ import { WasmDeployEnvironment } from "../../src/index"; +import { selectDeployment } from "../deployments/selector"; -async function DeployRouter({ getNamedAccounts, deployments }: WasmDeployEnvironment) { +async function DeployRouter({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { const { deployer } = await getNamedAccounts(); + // just check early that deploymentName is valid + selectDeployment(deploymentName, deployer.accountId); + await deployments.deploy("router", { from: deployer, contract: "Router", @@ -13,9 +17,10 @@ async function DeployRouter({ getNamedAccounts, deployments }: WasmDeployEnviron DeployRouter.tags = ["router"]; -DeployRouter.skip = async function skip({ deployments }: WasmDeployEnvironment): Promise { - const alreadyDeployed = Boolean(await deployments.getOrNull("router")); - return alreadyDeployed; +// eslint-disable-next-line @typescript-eslint/require-await +DeployRouter.skip = async function skip(_: WasmDeployEnvironment): Promise { + // the skip feature is not implemented yet in wasm-deploy + return false; }; export default DeployRouter; diff --git a/nabla/deploy/02_deploy_token_wrappers.ts b/nabla/deploy/02_deploy_token_wrappers.ts index 826bc7b..c85ee42 100644 --- a/nabla/deploy/02_deploy_token_wrappers.ts +++ b/nabla/deploy/02_deploy_token_wrappers.ts @@ -1,73 +1,30 @@ import { WasmDeployEnvironment } from "../../src/index"; -import { isTestnet } from "../_lib"; +import { selectDeployment } from "../deployments/selector"; -const EURC = { - name: "Mock EURC", - symbol: "EURC", - code: "EURC", - issuer: "0x2112ee863867e4e219fe254c0918b00bc9ea400775bfc3ab4430971ce505877c", -}; - -const BRL = { - name: "Mock BRL", - symbol: "BRL", - code: "BRL", - issuer: "0xeaac68d4d0e37b4c24c2536916e830735f032d0d6b2a1c8fca3bc5a25e083e3a", -}; - -const USDC = { - name: "Mock USDC", - symbol: "USDC", - code: "USDC", - issuer: "0x14d19631b03717d9ab9a366e10321ee266e72ec76cab6190f0a1336d48229f8b", -}; +async function DeployTokenWrappers({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { + const { deployer } = await getNamedAccounts(); -function generateStellarAssetArgs({ name, symbol, code, issuer }: typeof EURC) { - const codeArray = Array.from(Buffer.from(code.padEnd(12, "\0"), "ascii")); - const issuerArray = Array.from(Buffer.from(issuer.slice(2), "hex")); - return [name, symbol, 12, [2], [1], codeArray, issuerArray]; -} + const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); -async function DeployMockTokens({ getNamedAccounts, deployments }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); + for (const tokenEntry of Object.entries(deploymentDescription.tokens)) { + const [tokenName, tokenDescription] = tokenEntry; + const { name, symbol, decimals, variant, index, code, issuer } = tokenDescription; - await deployments.deploy("nativeErc20Wrapper", { - from: deployer, - contract: "ERC20Wrapper", - args: ["Mock AMPE", "AMPE", 12, [0], [0], [], []], - log: true, - }); - await deployments.deploy("usdcErc20Wrapper", { - from: deployer, - contract: "ERC20Wrapper", - args: generateStellarAssetArgs(USDC), - log: true, - }); - await deployments.deploy("brlErc20Wrapper", { - from: deployer, - contract: "ERC20Wrapper", - args: generateStellarAssetArgs(BRL), - log: true, - }); - await deployments.deploy("eurcErc20Wrapper", { - from: deployer, - contract: "ERC20Wrapper", - args: generateStellarAssetArgs(EURC), - log: true, - }); - await deployments.deploy("usdtErc20Wrapper", { - from: deployer, - contract: "ERC20Wrapper", - args: ["Mock USDT", "USDT", 6, [1], [1], [], []], - log: true, - }); + await deployments.deploy(`${tokenName}Erc20Wrapper`, { + from: deployer, + contract: "ERC20Wrapper", + args: [name, symbol, decimals, variant, index, code, issuer], + log: true, + }); + } } -DeployMockTokens.tags = ["tokens"]; +DeployTokenWrappers.tags = ["tokens"]; -DeployMockTokens.skip = async function skip({ deployments, network }: WasmDeployEnvironment): Promise { - const alreadyDeployed = Boolean(await deployments.getOrNull("mETH")); - return !isTestnet(network) || alreadyDeployed; +// eslint-disable-next-line @typescript-eslint/require-await +DeployTokenWrappers.skip = async function skip(_: WasmDeployEnvironment): Promise { + // the skip feature is not implemented yet in wasm-deploy + return false; }; -export default DeployMockTokens; +export default DeployTokenWrappers; diff --git a/nabla/deploy/03_deploy_oracle_wrappers.ts b/nabla/deploy/03_deploy_oracle_wrappers.ts index f84ce69..7ef5bd5 100644 --- a/nabla/deploy/03_deploy_oracle_wrappers.ts +++ b/nabla/deploy/03_deploy_oracle_wrappers.ts @@ -1,44 +1,43 @@ import { WasmDeployEnvironment } from "../../src/index"; -import { isTestnet, registerAsset } from "../_lib"; +import { registerAsset } from "../_lib"; -async function DeployMockOracles({ getNamedAccounts, deployments }: WasmDeployEnvironment) { +import { selectDeployment } from "../deployments/selector"; + +async function DeployOracleWrappers({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { const { deployer } = await getNamedAccounts(); - const [native, usdcWrapper, brlWrapper, eurcWrapper, usdtWrapper] = await Promise.all([ - deployments.get("nativeErc20Wrapper"), - deployments.get("usdcErc20Wrapper"), - deployments.get("brlErc20Wrapper"), - deployments.get("eurcErc20Wrapper"), - deployments.get("usdtErc20Wrapper"), - ]); + const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); + + const tokens = Object.entries(deploymentDescription.tokens); + + const tokenDeployments = await Promise.all( + tokens.map(async ([tokenName, _]) => deployments.get(`${tokenName}Erc20Wrapper`)) + ); const priceFeedWrapper = await deployments.deploy("priceFeedWrapper", { from: deployer, contract: "PriceOracleWrapper", args: [ - [ - { asset: native.address, blockchain: "Native", symbol: "NAT" }, - { asset: usdcWrapper.address, blockchain: "FIAT", symbol: "USD-USD" }, - { asset: brlWrapper.address, blockchain: "FIAT", symbol: "BRL-USD" }, - { asset: eurcWrapper.address, blockchain: "FIAT", symbol: "EUR-USD" }, - { asset: usdtWrapper.address, blockchain: "FIAT", symbol: "USD-USD" }, - ], + tokens.map(([_, tokenDescription], index) => ({ + asset: tokenDeployments[index].address, + blockchain: tokenDescription.oracleBlockchain, + symbol: tokenDescription.oracleSymbol, + })), ], log: true, }); - await registerAsset(deployments, { from: deployer, log: true }, native.address, priceFeedWrapper.address); - await registerAsset(deployments, { from: deployer, log: true }, usdcWrapper.address, priceFeedWrapper.address); - await registerAsset(deployments, { from: deployer, log: true }, brlWrapper.address, priceFeedWrapper.address); - await registerAsset(deployments, { from: deployer, log: true }, eurcWrapper.address, priceFeedWrapper.address); - await registerAsset(deployments, { from: deployer, log: true }, usdtWrapper.address, priceFeedWrapper.address); + for (const tokenDeployment of tokenDeployments) { + await registerAsset(deployments, { from: deployer, log: true }, tokenDeployment.address, priceFeedWrapper.address); + } } -DeployMockOracles.tags = ["oracles"]; +DeployOracleWrappers.tags = ["oracles"]; -DeployMockOracles.skip = async function skip({ deployments, network }: WasmDeployEnvironment): Promise { - const alreadyDeployed = Boolean(await deployments.getOrNull("priceFeedWrapper")); - return !isTestnet(network) || alreadyDeployed; +// eslint-disable-next-line @typescript-eslint/require-await +DeployOracleWrappers.skip = async function skip(_: WasmDeployEnvironment): Promise { + // the skip feature is not implemented yet in wasm-deploy + return false; }; -export default DeployMockOracles; +export default DeployOracleWrappers; diff --git a/nabla/deploy/04_deploy_curves.ts b/nabla/deploy/04_deploy_curves.ts index 8a3b3bf..4ce08da 100644 --- a/nabla/deploy/04_deploy_curves.ts +++ b/nabla/deploy/04_deploy_curves.ts @@ -1,21 +1,32 @@ import { WasmDeployEnvironment } from "../../src/index"; +import { selectDeployment } from "../deployments/selector"; -async function DeployCurves({ getNamedAccounts, deployments }: WasmDeployEnvironment) { +async function DeployCurves({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { const { deployer } = await getNamedAccounts(); - await deployments.deploy("nablaCurve", { - from: deployer, - contract: "NablaCurve", - args: [0, 100_000_000_000n], - log: true, - }); + const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); + + for (const curveEntries of Object.entries(deploymentDescription.curves)) { + const [curveName, curveDescription] = curveEntries; + + const rawAlpha = BigInt(Math.round(curveDescription.alpha * 1e9)) * 10n ** 9n; + const rawBeta = BigInt(Math.round(curveDescription.beta * 1e9)) * 10n ** 9n; + + await deployments.deploy(`curve-${curveName}`, { + from: deployer, + contract: "NablaCurve", + args: [rawAlpha, rawBeta], + log: true, + }); + } } DeployCurves.tags = ["curves"]; -DeployCurves.skip = async function skip({ deployments }: WasmDeployEnvironment): Promise { - const alreadyDeployed = Boolean(await deployments.getOrNull("nablaCurve")); - return alreadyDeployed; +// eslint-disable-next-line @typescript-eslint/require-await +DeployCurves.skip = async function skip(_: WasmDeployEnvironment): Promise { + // the skip feature is not implemented yet in wasm-deploy + return false; }; export default DeployCurves; diff --git a/nabla/deploy/05_deploy_backstop.ts b/nabla/deploy/05_deploy_backstop.ts index 024b710..8c89080 100644 --- a/nabla/deploy/05_deploy_backstop.ts +++ b/nabla/deploy/05_deploy_backstop.ts @@ -1,23 +1,43 @@ import { WasmDeployEnvironment } from "../../src/index"; +import { setPoolCap } from "../_lib"; -async function DeployBackstopPool({ getNamedAccounts, deployments }: WasmDeployEnvironment) { +import { selectDeployment } from "../deployments/selector"; + +async function DeployBackstopPool({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { const { deployer } = await getNamedAccounts(); - const [router, usdcWrapper] = await Promise.all([deployments.get("router"), deployments.get("usdcErc20Wrapper")]); + const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); + + const backstopDescription = deploymentDescription.backstop; + const poolTokenDescription = deploymentDescription.tokens[backstopDescription.token]; + + const [router, backstopPoolToken] = await Promise.all([ + deployments.get("router"), + deployments.get(`${backstopDescription.token}Erc20Wrapper`), + ]); await deployments.deploy("backstop", { from: deployer, contract: "BackstopPool", - args: [router.address, usdcWrapper.address, "Nabla Backstop LP", "BSP-LP"], + args: [ + router.address, + backstopPoolToken.address, + backstopDescription.lpTokenName, + backstopDescription.lpTokenSymbol, + ], log: true, }); + + const rawPoolCap = BigInt(backstopDescription.poolCapUnits) * 10n ** BigInt(poolTokenDescription.decimals); + await setPoolCap(deployments, { from: deployer, log: true }, "backstop", rawPoolCap); } DeployBackstopPool.tags = ["backstop"]; -DeployBackstopPool.skip = async function skip({ deployments }: WasmDeployEnvironment): Promise { - const alreadyDeployed = Boolean(await deployments.getOrNull("backstop")); - return alreadyDeployed; +// eslint-disable-next-line @typescript-eslint/require-await +DeployBackstopPool.skip = async function skip(_: WasmDeployEnvironment): Promise { + // the skip feature is not implemented yet in wasm-deploy + return false; }; export default DeployBackstopPool; diff --git a/nabla/deploy/06_deploy_swap_pools.ts b/nabla/deploy/06_deploy_swap_pools.ts index 6887368..c045075 100644 --- a/nabla/deploy/06_deploy_swap_pools.ts +++ b/nabla/deploy/06_deploy_swap_pools.ts @@ -1,110 +1,115 @@ import { WasmDeployEnvironment } from "../../src/index"; -import { registerSwapPool } from "../_lib"; +import { + registerSwapPool, + setSwapFees, + setInsuranceWithdrawalTimelock, + setPoolCap, + setMaxCoverageRatio, +} from "../_lib"; -async function DeploySwapPools({ getNamedAccounts, deployments }: WasmDeployEnvironment) { +import { selectDeployment } from "../deployments/selector"; + +async function DeploySwapPools({ getNamedAccounts, deployments, deploymentName }: WasmDeployEnvironment) { const { deployer } = await getNamedAccounts(); - const treasury = deployer; - - const [backstop, router, curve, nativeWrapper, usdcWrapper, brlWrapper, eurcWrapper, usdtWrapper] = await Promise.all( - [ - deployments.get("backstop"), - deployments.get("router"), - deployments.get("nablaCurve"), - deployments.get("nativeErc20Wrapper"), - deployments.get("usdcErc20Wrapper"), - deployments.get("brlErc20Wrapper"), - deployments.get("eurcErc20Wrapper"), - deployments.get("usdtErc20Wrapper"), - ] - ); - - const poolNative = await deployments.deploy("swap-native", { - from: deployer, - contract: "SwapPool", - args: [ - nativeWrapper.address, - curve.address, - router.address, - backstop.address, - treasury.accountId, - "AMPE Swap LP", - "AMPE-LP", - ], - log: true, - }); - - const poolUsdc = await deployments.deploy("swap-usdc", { - from: deployer, - contract: "SwapPool", - args: [ - usdcWrapper.address, - curve.address, - router.address, - backstop.address, - treasury.accountId, - "USDC Swap LP", - "USDC-LP", - ], - log: true, - }); - - const poolBrl = await deployments.deploy("swap-brl", { - from: deployer, - contract: "SwapPool", - args: [ - brlWrapper.address, - curve.address, - router.address, - backstop.address, - treasury.accountId, - "BRL Swap LP", - "BRL-LP", - ], - log: true, - }); - - const poolEurc = await deployments.deploy("swap-eurc", { - from: deployer, - contract: "SwapPool", - args: [ - eurcWrapper.address, - curve.address, - router.address, - backstop.address, - treasury.accountId, - "EURC Swap LP", - "EURC-LP", - ], - log: true, - }); - - const poolUsdt = await deployments.deploy("swap-usdt", { - from: deployer, - contract: "SwapPool", - args: [ - usdtWrapper.address, - curve.address, - router.address, - backstop.address, - treasury.accountId, - "USDT Swap LP", - "USDT-LP", - ], - log: true, - }); - - await registerSwapPool(deployments, { from: deployer, log: true }, nativeWrapper.address, poolNative.address); - await registerSwapPool(deployments, { from: deployer, log: true }, usdcWrapper.address, poolUsdc.address); - await registerSwapPool(deployments, { from: deployer, log: true }, brlWrapper.address, poolBrl.address); - await registerSwapPool(deployments, { from: deployer, log: true }, eurcWrapper.address, poolEurc.address); - await registerSwapPool(deployments, { from: deployer, log: true }, usdtWrapper.address, poolUsdt.address); + + const deploymentDescription = selectDeployment(deploymentName, deployer.accountId); + + const tokens = Object.entries(deploymentDescription.tokens); + const curves = Object.entries(deploymentDescription.curves); + + const [backstop, router, curveDeployments, tokenDeployments] = await Promise.all([ + deployments.get("backstop"), + deployments.get("router"), + Promise.all(curves.map(async ([curveName, _]) => deployments.get(`curve-${curveName}`))), + Promise.all(tokens.map(async ([tokenName, _]) => deployments.get(`${tokenName}Erc20Wrapper`))), + ]); + + for (const swapPoolEntry of Object.entries(deploymentDescription.swapPools)) { + const [token, poolDescription] = swapPoolEntry; + const { + curve, + treasuryAccount, + lpTokenName, + lpTokenSymbol, + insuranceFeeBasisPoints, + lpFeeBasisPoints, + backstopFeeBasisPoints, + protocolFeeBasisPoints, + insuranceWithdrawalTimelock, + poolCapUnits, + maxCoverageRatioPercent, + } = poolDescription; + + const tokenIndex = tokens.findIndex(([tokenName, _]) => tokenName === token); + const tokenDeployment = tokenDeployments[tokenIndex]; + + const curveIndex = curves.findIndex(([curveName, _]) => curveName === curve); + const curveDeployment = curveDeployments[curveIndex]; + + const poolTokenDescription = deploymentDescription.tokens[token]; + + const deploymentName = `swap-${token}`; + + const poolDeployment = await deployments.deploy(deploymentName, { + from: deployer, + contract: "SwapPool", + args: [ + tokenDeployment.address, + curveDeployment.address, + router.address, + backstop.address, + treasuryAccount, + lpTokenName, + lpTokenSymbol, + ], + log: true, + }); + + await registerSwapPool( + deployments, + { from: deployer, log: true }, + tokenDeployment.address, + poolDeployment.address, + insuranceFeeBasisPoints + ); + + const rawLpFee = Math.round(lpFeeBasisPoints * 100); + const rawBackstopFee = Math.round(backstopFeeBasisPoints * 100); + const rawProtocolFee = Math.round(protocolFeeBasisPoints * 100); + await setSwapFees( + deployments, + { from: deployer, log: true }, + deploymentName, + rawLpFee, + rawBackstopFee, + rawProtocolFee + ); + + await setInsuranceWithdrawalTimelock( + deployments, + { from: deployer, log: true }, + deploymentName, + insuranceWithdrawalTimelock + ); + + const rawPoolCap = BigInt(poolCapUnits) * 10n ** BigInt(poolTokenDescription.decimals); + await setPoolCap(deployments, { from: deployer, log: true }, deploymentName, rawPoolCap); + + await setMaxCoverageRatio( + deployments, + { from: deployer, log: true }, + deploymentName, + BigInt(maxCoverageRatioPercent) + ); + } } DeploySwapPools.tags = ["swap-pools"]; -DeploySwapPools.skip = async function skip({ deployments }: WasmDeployEnvironment): Promise { - const alreadyDeployed = Boolean(await deployments.getOrNull("swap-native")); - return alreadyDeployed; +// eslint-disable-next-line @typescript-eslint/require-await +DeploySwapPools.skip = async function skip(_: WasmDeployEnvironment): Promise { + // the skip feature is not implemented yet in wasm-deploy + return false; }; export default DeploySwapPools; diff --git a/nabla/deploy/07_set_swap_fees.ts b/nabla/deploy/07_set_swap_fees.ts deleted file mode 100644 index b3ac766..0000000 --- a/nabla/deploy/07_set_swap_fees.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { WasmDeployEnvironment } from "../../src/index"; -import { setSwapFees } from "../_lib"; - -async function SetSwapFees({ getNamedAccounts, deployments }: WasmDeployEnvironment) { - const { deployer } = await getNamedAccounts(); - - for (const swapPool of ["swap-native", "swap-usdc", "swap-brl", "swap-eurc", "swap-usdt"]) { - await setSwapFees( - deployments, - { from: deployer, log: true }, - swapPool, - 1500, // 0.15% - 3000, // 0.30% - 500 // 0.05% - ); - } -} - -SetSwapFees.tags = ["swap-fees"]; - -export default SetSwapFees; diff --git a/nabla-pendulum/deployments/mockTestnet.ts b/nabla/deployments/foucoco/mockTestnet.ts similarity index 88% rename from nabla-pendulum/deployments/mockTestnet.ts rename to nabla/deployments/foucoco/mockTestnet.ts index 7828053..a69d71a 100644 --- a/nabla-pendulum/deployments/mockTestnet.ts +++ b/nabla/deployments/foucoco/mockTestnet.ts @@ -1,12 +1,12 @@ -import { DeploymentDescription, generateStellarToken } from "./types"; +import { DeploymentDescription, generateStellarToken } from "../types"; // this is deployment described on -// https://www.notion.so/satoshipay/24-05-16-Nabla-Pendulum-Deployment-c7cefd58f44c428a92ceaea30c603286?pvs=4#c0445a3c928c48e28de6f0b485d39f6b +// https://www.notion.so/satoshipay/24-09-30-Nabla-Foucoco-Paseo-Deployment-1118b1b29b2f804eababf94383a56f7b export function generateDeploymentDescription(deployerAddress: string): DeploymentDescription { return { tokens: { - /*ampe: { + ampe: { name: "Mock AMPE", symbol: "AMPE", decimals: 12, @@ -16,10 +16,7 @@ export function generateDeploymentDescription(deployerAddress: string): Deployme issuer: [], oracleBlockchain: "Native", oracleSymbol: "NAT", - },*/ - - // for this token: 0x14d19631b03717d9ab9a366e10321ee266e72ec76cab6190f0a1336d48229f8b works - // 0x3b9911380efe988ba0a8900eb1cfe44f366f7dbe946bed077240f7f624df15c5 does not work + }, usdc: generateStellarToken({ name: "Mock USDC", symbol: "USDC", @@ -28,7 +25,7 @@ export function generateDeploymentDescription(deployerAddress: string): Deployme oracleBlockchain: "FIAT", oracleSymbol: "USD-USD", }), - /*brl: generateStellarToken({ + brl: generateStellarToken({ name: "Mock BRL", symbol: "BRL", code: "BRL", @@ -54,7 +51,7 @@ export function generateDeploymentDescription(deployerAddress: string): Deployme issuer: [], oracleBlockchain: "FIAT", oracleSymbol: "USD-USD", - },*/ + }, }, curves: { @@ -72,7 +69,7 @@ export function generateDeploymentDescription(deployerAddress: string): Deployme }, swapPools: { - /*ampe: { + ampe: { curve: "default", treasuryAccount: deployerAddress, lpTokenName: "AMPE Swap LP", @@ -84,7 +81,7 @@ export function generateDeploymentDescription(deployerAddress: string): Deployme insuranceWithdrawalTimelock: 1_000, poolCapUnits: 1_000_000, maxCoverageRatioPercent: 200, - },*/ + }, usdc: { curve: "default", treasuryAccount: deployerAddress, diff --git a/nabla/deployments/foucoco/slippageTest.ts b/nabla/deployments/foucoco/slippageTest.ts new file mode 100644 index 0000000..7e94f36 --- /dev/null +++ b/nabla/deployments/foucoco/slippageTest.ts @@ -0,0 +1,105 @@ +import { DeploymentDescription, generateStellarToken } from "../types"; + +// this deployment was used to validate the prediction about the slippage on the Pendulum production deployment +// See here: https://www.notion.so/satoshipay/24-09-30-Public-Deployment-1118b1b29b2f807283dbd10e0a6ae8b9?pvs=4#1158b1b29b2f80bc8be8efb7bc5197b4 + +export function generateDeploymentDescription(deployerAddress: string): DeploymentDescription { + return { + tokens: { + usdc: generateStellarToken({ + name: "Mock USDC", + symbol: "USDC", + code: "USDC", + issuer: "0x3b9911380efe988ba0a8900eb1cfe44f366f7dbe946bed077240f7f624df15c5", // GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN (centre.io) + oracleBlockchain: "FIAT", + oracleSymbol: "USD-USD", + }), + stable: { + name: "Stable", + symbol: "Stable", + decimals: 12, + variant: [1], + index: [2], + code: [], + issuer: [], + oracleBlockchain: "FIAT", + oracleSymbol: "USD-USD", + }, + dot: { + name: "DOT", + symbol: "DOT", + decimals: 12, + variant: [1], + index: [3], + code: [], + issuer: [], + oracleBlockchain: "FIAT", + oracleSymbol: "USD-USD", + }, + }, + + curves: { + noSlippage: { + alpha: 0, + beta: 0.00001, + }, + stable: { + alpha: 6.91861, + beta: 0.04592, + }, + dot: { + alpha: 4.28516, + beta: 0.12199, + }, + }, + + backstop: { + token: "usdc", + lpTokenName: "Nabla Backstop LP", + lpTokenSymbol: "BSP-LP", + poolCapUnits: 1_000_000, + }, + + swapPools: { + usdc: { + curve: "noSlippage", + treasuryAccount: deployerAddress, + lpTokenName: "USDC Swap LP", + lpTokenSymbol: "USDC-LP", + insuranceFeeBasisPoints: 0, + lpFeeBasisPoints: 0, + backstopFeeBasisPoints: 0, + protocolFeeBasisPoints: 0, + insuranceWithdrawalTimelock: 1_000, + poolCapUnits: 1_000_000, + maxCoverageRatioPercent: 200, + }, + stable: { + curve: "stable", + treasuryAccount: deployerAddress, + lpTokenName: "Stable LP", + lpTokenSymbol: "STB-LP", + insuranceFeeBasisPoints: 0, + lpFeeBasisPoints: 0, + backstopFeeBasisPoints: 0, + protocolFeeBasisPoints: 0, + insuranceWithdrawalTimelock: 1_000, + poolCapUnits: 1_000_000, + maxCoverageRatioPercent: 400, + }, + dot: { + curve: "dot", + treasuryAccount: deployerAddress, + lpTokenName: "DOT LP", + lpTokenSymbol: "DOT-LP", + insuranceFeeBasisPoints: 0, + lpFeeBasisPoints: 0, + backstopFeeBasisPoints: 0, + protocolFeeBasisPoints: 0, + insuranceWithdrawalTimelock: 1_000, + poolCapUnits: 1_000_000, + maxCoverageRatioPercent: 400, + }, + }, + }; +} diff --git a/nabla-pendulum/deployments/productionPendulum.ts b/nabla/deployments/pendulum/productionPendulum.ts similarity index 94% rename from nabla-pendulum/deployments/productionPendulum.ts rename to nabla/deployments/pendulum/productionPendulum.ts index da493f2..f906365 100644 --- a/nabla-pendulum/deployments/productionPendulum.ts +++ b/nabla/deployments/pendulum/productionPendulum.ts @@ -1,7 +1,10 @@ -import { DeploymentDescription, generateStellarToken } from "./types"; +import { DeploymentDescription, generateStellarToken } from "../types"; const SECONDS_PER_BLOCK = 12; +// this is deployment described on +// https://www.notion.so/satoshipay/24-09-30-Public-Deployment-1118b1b29b2f807283dbd10e0a6ae8b9 + export function generateDeploymentDescription(): DeploymentDescription { const treasuryAccount = "6bBWiUZpDKcecCbP3kjfYTRNToj8zHKugFxNs6yAP4j1u2ib"; diff --git a/nabla-pendulum/deployments/usdcAxelarVortexPrototype.ts b/nabla/deployments/pendulum/usdcAxelarVortexPrototype.ts similarity index 93% rename from nabla-pendulum/deployments/usdcAxelarVortexPrototype.ts rename to nabla/deployments/pendulum/usdcAxelarVortexPrototype.ts index 5d2ff13..cd05981 100644 --- a/nabla-pendulum/deployments/usdcAxelarVortexPrototype.ts +++ b/nabla/deployments/pendulum/usdcAxelarVortexPrototype.ts @@ -1,7 +1,7 @@ -import { DeploymentDescription, generateStellarToken } from "./types"; +import { DeploymentDescription, generateStellarToken } from "../types"; // this is deployment described on -// https://www.notion.so/satoshipay/24-05-16-Nabla-Pendulum-Deployment-c7cefd58f44c428a92ceaea30c603286?pvs=4#8e4f600924684cc1a9f2e1842323dda6 +// https://www.notion.so/satoshipay/24-07-04-USDC-axl-Prototype-Deployment-1118b1b29b2f80c7ba3ad321c6bb3e8b export function generateDeploymentDescription(deployerAddress: string): DeploymentDescription { return { diff --git a/nabla-pendulum/deployments/usdtVortexPrototype.ts b/nabla/deployments/pendulum/usdtVortexPrototype.ts similarity index 94% rename from nabla-pendulum/deployments/usdtVortexPrototype.ts rename to nabla/deployments/pendulum/usdtVortexPrototype.ts index af43243..a8619fc 100644 --- a/nabla-pendulum/deployments/usdtVortexPrototype.ts +++ b/nabla/deployments/pendulum/usdtVortexPrototype.ts @@ -1,7 +1,7 @@ -import { DeploymentDescription, generateStellarToken } from "./types"; +import { DeploymentDescription, generateStellarToken } from "../types"; // this is deployment described on -// https://www.notion.so/satoshipay/24-05-16-Nabla-Pendulum-Deployment-c7cefd58f44c428a92ceaea30c603286?pvs=4#c0445a3c928c48e28de6f0b485d39f6b +// https://www.notion.so/satoshipay/24-05-16-USDT-Prototype-Deployment-1118b1b29b2f806f9070e734a10162d3 export function generateDeploymentDescription(deployerAddress: string): DeploymentDescription { return { diff --git a/nabla-pendulum/deployments/selector.ts b/nabla/deployments/selector.ts similarity index 68% rename from nabla-pendulum/deployments/selector.ts rename to nabla/deployments/selector.ts index 3c5bb2c..8e103fb 100644 --- a/nabla-pendulum/deployments/selector.ts +++ b/nabla/deployments/selector.ts @@ -1,15 +1,17 @@ import { DeploymentDescription } from "./types"; -import * as usdtVortexPrototype from "./usdtVortexPrototype"; -import * as usdcAxelarVortexPrototype from "./usdcAxelarVortexPrototype"; -import * as productionPendulum from "./productionPendulum"; -import * as mockTestnet from "./mockTestnet"; +import * as usdtVortexPrototype from "./pendulum/usdtVortexPrototype"; +import * as usdcAxelarVortexPrototype from "./pendulum/usdcAxelarVortexPrototype"; +import * as productionPendulum from "./pendulum/productionPendulum"; +import * as mockTestnet from "./foucoco/mockTestnet"; +import * as slippageTest from "./foucoco/slippageTest"; const DEPLOYMENT_DESCRIPTIONS: Record DeploymentDescription> = { usdtVortexPrototype: usdtVortexPrototype.generateDeploymentDescription, usdcAxelarVortexPrototype: usdcAxelarVortexPrototype.generateDeploymentDescription, productionPendulum: productionPendulum.generateDeploymentDescription, mockTestnet: mockTestnet.generateDeploymentDescription, + slippageTest: slippageTest.generateDeploymentDescription, }; export function selectDeployment(deploymentName: string | undefined, deployerAddress: string): DeploymentDescription { diff --git a/nabla-pendulum/deployments/types.ts b/nabla/deployments/types.ts similarity index 100% rename from nabla-pendulum/deployments/types.ts rename to nabla/deployments/types.ts diff --git a/package.json b/package.json index b7b6f4f..98539db 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,9 @@ "scripts": { "start": "tsx src/index.ts", "pull:nabla": "tsx src/index.ts pull nabla", - "pull:nabla-pendulum": "tsx src/index.ts pull nabla-pendulum", - "deploy:foucoco": "tsx src/index.ts deploy nabla --network foucoco", - "deploy:local": "tsx src/index.ts deploy nabla --network local", - "deploy:pendulum": "tsx src/index.ts deploy nabla-pendulum --network pendulum", + "deploy:foucoco": "tsx src/index.ts deploy nabla --network foucoco --deployment mockTestnet", + "deploy:local": "tsx src/index.ts deploy nabla --network local --deployment mockTestnet", + "deploy:pendulum": "tsx src/index.ts deploy nabla --network pendulum --deployment productionPendulum", "lint:ts": "tsc --noEmit" }, "keywords": [], diff --git a/tsconfig.json b/tsconfig.json index 5df8260..7281e70 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,5 +23,5 @@ "isolatedModules": true }, - "include": ["src/**/*", "nabla/**/*", "nabla-indexer/**/*", "nabla-pendulum/**/*"] + "include": ["src/**/*", "nabla/**/*", "nabla-indexer/**/*", "nabla/**/*"] }