@devasher/kuru-sdk
Version:
Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)
600 lines • 53.2 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "KuruAMMVault",
"sourceName": "contracts/KuruAMMVault.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "token1_",
"type": "address"
},
{
"internalType": "address",
"name": "token2_",
"type": "address"
},
{
"internalType": "address",
"name": "_marginAccount",
"type": "address"
},
{
"internalType": "address",
"name": "_market",
"type": "address"
},
{
"internalType": "uint96",
"name": "_spreadConstant",
"type": "uint96"
},
{
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"internalType": "string",
"name": "_symbol",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "InsufficientBalance",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientLiquidityMinted",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientQuoteToken",
"type": "error"
},
{
"inputs": [],
"name": "NativeAssetMismatch",
"type": "error"
},
{
"inputs": [],
"name": "NativeAssetTransferFail",
"type": "error"
},
{
"inputs": [],
"name": "NewSizeExceedsPartiallyFilledSize",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedValue",
"type": "uint256"
}
],
"name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount2",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "deposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedValue",
"type": "uint256"
}
],
"name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "mint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "asset1",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "asset2",
"type": "uint256"
}
],
"name": "previewDeposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "previewMint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "previewRedeem",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "asset1",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "asset2",
"type": "uint256"
}
],
"name": "previewWithdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "redeem",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "setMarketParams",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalAssets",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x6101608060405234610609576126d1803803809161001d828561060d565b8339810160e0828203126106095761003482610630565b61004060208401610630565b61004c60408501610630565b9161005960608601610630565b6080860151959094906001600160601b03871687036106095760a08101516001600160401b0381116106095782610091918301610644565b60c08201519092906001600160401b038111610609576100b19201610644565b815190916001600160401b03821161050c5760035490600182811c921680156105ff575b60208310146104ee5781601f849311610591575b50602090601f831160011461052b575f92610520575b50508160011b915f199060031b1c1916176003555b8051906001600160401b03821161050c5760045490600182811c92168015610502575b60208310146104ee5781601f849311610480575b50602090601f831160011461041a575f9261040f575b50508160011b915f199060031b1c1916176004555b670de0b6b3a764000060055560808190526001600160a01b0316908115801591906104065760405163313ce56760e01b8152602081600481875afa80156103545760ff915f916103e7575b505b1660a05260c08190526001600160a01b0316948515801594906103de5760405163313ce56760e01b81526020816004818b5afa80156103545760ff915f916103af575b505b1660e0526001600160a01b039081166101008190529516610120526101405261035f575b506102ed575b604051611fee90816106e38239608051818181610bb101528181610f6001526110cf015260a05181505060c051818181610c1501528181610fd70152818161133101526115f4015260e05181505061010051818181610b8601528181610f880152818161150d01528181611d250152611df301526101205181818161045201528181610a11015281816111ae0152611a78015261014051818181610a5801528181610dea015281816111f5015281816114150152611abc0152f35b5f916044602092604051948593849263095ea7b360e01b84526004840152811960248401525af1801561035457610325575b80610232565b6103469060203d60201161034d575b61033e818361060d565b8101906106ca565b505f61031f565b503d610334565b6040513d5f823e3d90fd5b60205f9160446040518094819363095ea7b360e01b8352886004840152811960248401525af18015610354571561022c576103a89060203d60201161034d5761033e818361060d565b505f61022c565b6103d1915060203d6020116103d7575b6103c9818361060d565b8101906106b1565b5f610206565b503d6103bf565b60ff6012610208565b610400915060203d6020116103d7576103c9818361060d565b5f6101c1565b60ff60126101c3565b015190505f80610161565b60045f9081528281209350601f198516905b8181106104685750908460019594939210610450575b505050811b01600455610176565b01515f1960f88460031b161c191690555f8080610442565b9293602060018192878601518155019501930161042c565b60045f529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810191602085106104e4575b90601f859493920160051c01905b8181106104d6575061014b565b5f81558493506001016104c9565b90915081906104bb565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610137565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100ff565b60035f9081528281209350601f198516905b8181106105795750908460019594939210610561575b505050811b01600355610114565b01515f1960f88460031b161c191690555f8080610553565b9293602060018192878601518155019501930161053d565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106105f5575b90601f859493920160051c01905b8181106105e757506100e9565b5f81558493506001016105da565b90915081906105cc565b91607f16916100d5565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761050c57604052565b51906001600160a01b038216820361060957565b81601f82011215610609578051906001600160401b03821161050c5760405192610678601f8401601f19166020018561060d565b82845260208383010111610609575f5b82811061069c57505060205f918301015290565b80602080928401015182828701015201610688565b90816020910312610609575160ff811681036106095790565b9081602091031261060957518015158103610609579056fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301e1d1141461085e57806306fdde03146107a3578063095ea7b31461077d57806318160ddd1461076057806323b872dd14610728578063313ce5671461070d57806339509351146106bf578063488bd7b0146106855780634cdad5061461064b57806370a08231146106145780637660b1531461042c5780637a7af70d146104095780638dbdbe6d146103d157806394bf804d1461037c57806395d89b4114610278578063a457c2d7146101d5578063a9059cbb146101a4578063b3d7f6b91461015e578063b460af9414610159578063ba087652146101595763dd62ed3e0361000e57346101555760403660031901126101555761011e6108bf565b6101266108d5565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b610901565b3461015557602036600319011261015557604061018e610198600435610182610f43565b93906002549083611ca9565b9260025491611ca9565b82519182526020820152f35b34610155576040366003190112610155576101ca6101c06108bf565b60243590336117be565b602060405160018152f35b34610155576040366003190112610155576101ee6108bf565b60243590335f52600160205260405f2060018060a01b0382165f5260205260405f205491808310610225576101ca92039033611622565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b34610155575f366003190112610155576040515f6004548060011c90600181168015610372575b60208310811461035e5782855290811561033a57506001146102dc575b6102d8836102cc81850382610f0d565b60405191829182610878565b0390f35b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610320575090915081016020016102cc6102bc565b919260018160209254838588010152019101909291610308565b60ff191660208086019190915291151560051b840190910191506102cc90506102bc565b634e487b7160e01b5f52602260045260245ffd5b91607f169161029f565b60403660031901126101555760406103b26103956108d5565b6103c46103bc6004356103a6610f43565b95906002549083611ca9565b9460025491611ca9565b9182846110cb565b5082519182526020820152f35b6060366003190112610155576044356001600160a01b0381168103610155576104016020916024356004356110cb565b604051908152f35b3461015557602061040161041c366108eb565b610424611a69565b929050611921565b34610155575f36600319011261015557604051632432509f60e21b8152610160816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610609575f905f925f915f915f915f915f80915f935f915f91610546575b5090640100000000600160801b039291600d55600c5563ffffffff600b549116936001600160601b0360801b9060801b169063ffffffff60e01b16179160201b161717600b55600a5560018060a01b031660018060a01b0319600954161760095560085560018060a01b031660018060a01b03196007541617600755640100000000600160801b0363ffffffff60065492169260201b169060018060801b03191617176006555f80f35b9a5050505050505050505050610160813d8211610601575b8161056c6101609383610f0d565b810103126101555761057d81611092565b9061058a602082016110a3565b90610597604082016110b7565b926060820151916105aa608082016110b7565b9160a0820151916105bd60c08201611092565b91640100000000600160801b036105d660e084016110a3565b6105e361010085016110a3565b9261014061012086015195015190999a98979695919394919261049c565b3d915061055e565b6040513d5f823e3d90fd5b34610155576020366003190112610155576001600160a01b036106356108bf565b165f525f602052602060405f2054604051908152f35b3461015557602036600319011261015557604061067b61019860043561066f610f43565b93906002549083611c93565b9260025491611c93565b346101555760206106af610698366108eb565b91906106a56106a5610f43565b9260025490611ca9565b8181109082180218604051908152f35b34610155576040366003190112610155576101ca6106db6108bf565b335f52600160205260405f2060018060a01b0382165f5260205261070660405f206024359054611085565b9033611622565b34610155575f36600319011261015557602060405160128152f35b34610155576060366003190112610155576101ca6107446108bf565b61074c6108d5565b6044359161075b833383611726565b6117be565b34610155575f366003190112610155576020600254604051908152f35b34610155576040366003190112610155576101ca6107996108bf565b6024359033611622565b34610155575f366003190112610155576040515f6003548060011c90600181168015610854575b60208310811461035e5782855290811561033a57506001146107f6576102d8836102cc81850382610f0d565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061083a575090915081016020016102cc6102bc565b919260018160209254838588010152019101909291610822565b91607f16916107ca565b34610155575f366003190112610155576040610198610f43565b9190916020815282518060208301525f5b8181106108a9575060409293505f838284010152601f8019910116010190565b8060208092870101516040828601015201610889565b600435906001600160a01b038216820361015557565b602435906001600160a01b038216820361015557565b6040906003190112610155576004359060243590565b34610155576060366003190112610155576024356004356001600160a01b038216820361015557604435906001600160a01b03821690818303610155575f90825f525f60205260405f20548111610efe576109789381843303610eec575b505061098361096c610f43565b95906002549084611c93565b946002549083611c93565b9261098c611a69565b919092869160025480610ed8575b508015610e8957805f525f60205260405f205491808310610e39576020815f80516020611f99833981519152925f958587528684520360408620558060025403600255604051908152a36109ec611be6565b908303928311610d03575f9283925f1914610d96575b604051630445da7b60e51b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919061010081600481865afa938415610609575f915f95610d17575b507f00000000000000000000000000000000000000000000000000000000000000006001600160601b038116610a8b8582611a38565b91602084019283516001600160601b0316610aa591611a38565b90610aaf906119ee565b93606001938451610abf90611a2a565b610ad1916001600160601b0316611a38565b610ada91611a4b565b6001600160601b031694610aed91611a38565b90516001600160601b0316610b0191611a38565b9051610b0c90611a2a565b806107d002906107d0820403610d0357610b306001600160601b0392918392611a4b565b169416821190811591610cef575b50610ce057813b15610155575f6084928195604051978896879563e55bb4e360e01b875260048701526024860152604485015260648401525af1801561060957610ccd575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090823b15610ca657604051627b8a6760e11b8152600481018690526001600160a01b0383166024820152818160448183885af18015610ca957908291610cb8575b50507f000000000000000000000000000000000000000000000000000000000000000092803b15610cb457604051627b8a6760e11b8152600481018690526001600160a01b03851660248201529082908290604490829084905af18015610ca957610c91575b50509361019891610c8b8260409787611eaf565b83611eaf565b610c9c828092610f0d565b610ca65780610c77565b80fd5b6040513d84823e3d90fd5b5080fd5b81610cc291610f0d565b610ca657805f610c11565b610cd991505f90610f0d565b5f80610b83565b636a2628d960e01b5f5260045ffd5b6001600160601b039150168311155f610b3e565b634e487b7160e01b5f52601160045260245ffd5b91509350610100813d8211610d8e575b81610d356101009383610f0d565b8101031261015557610d46816110b7565b50610d53604082016110a3565b610d8560e0610d64608085016110a3565b93610d7160a082016110a3565b50610d7e60c082016110a3565b50016110a3565b5090935f610a55565b3d9150610d27565b819350809250610dd7610dce610dbb610db56060610ddc960151611a2a565b89611a38565b610dc860a0880151611a2a565b90611a4b565b60055490611a38565b611a4b565b916001600160601b03610e0e7f0000000000000000000000000000000000000000000000000000000000000000611a0c565b166103e88402816103e8868304148615170215610e2c570491610a02565b63ad251c275f526004601cfd5b60405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b610ee59193508583611c93565b915f61099a565b610ef7913390611726565b5f8161095f565b631e9acf1760e31b5f5260045ffd5b90601f8019910116810190811067ffffffffffffffff821117610f2f57604052565b634e487b7160e01b5f52604160045260245ffd5b60405163d4fac45d60e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169190602081604481865afa908115610609575f91611053575b5060405163d4fac45d60e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482015292602090849060449082905afa928315610609575f9361102357509190565b9092506020813d60201161104b575b8161103f60209383610f0d565b81010312610155575190565b3d9150611032565b90506020813d60201161107d575b8161106e60209383610f0d565b8101031261015557515f610fc1565b3d9150611061565b91908201809211610d0357565b519063ffffffff8216820361015557565b51906001600160601b038216820361015557565b51906001600160a01b038216820361015557565b90917f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b038316158080156115f1575b156115e957156115e357805b3410155b156115d4578392611121611a69565b6002549195909115611475575061115d6111526111416005548487611ca9565b61114c600a54611a2a565b90611a38565b610dc8600854611a2a565b9586116114665761117a611172828886611921565b809795611cc7565b8515611457576111928361118c611be6565b96611085565b945f955f925f19146113db575b604051630445da7b60e51b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919061010081600481865afa938415610609575f915f9561137d575b507f00000000000000000000000000000000000000000000000000000000000000006001600160601b0381166112288582611a38565b91602084019283516001600160601b031661124291611a38565b9061124c906119ee565b9360600193845161125c90611a2a565b61126e916001600160601b0316611a38565b61127791611a4b565b6001600160601b03169461128a91611a38565b90516001600160601b031661129e91611a38565b90516112a990611a2a565b806107d002906107d0820403610d03576112cd6001600160601b0392918392611a4b565b169416821190811591611369575b50610ce057813b15610155575f60849281956040519a8b96879563e55bb4e360e01b875260048701526024860152604485015260648401525af1918215610609576113569461132f93611359575b50611d11565b7f000000000000000000000000000000000000000000000000000000000000000090611d11565b90565b5f61136391610f0d565b5f611329565b6001600160601b039150168311155f6112db565b91509350610100813d82116113d3575b8161139b6101009383610f0d565b81010312610155576113ac816110b7565b506113b9604082016110a3565b6113ca60e0610d64608085016110a3565b5090935f6111f2565b3d915061138d565b819650809250610dd7610dce6113fa610db56060611407960151611a2a565b610dc860a08b0151611a2a565b946001600160601b036114397f0000000000000000000000000000000000000000000000000000000000000000611a0c565b166103e88702816103e8898304148915170215610e2c57049161119f565b633489be7560e21b5f5260045ffd5b635cc39c2360e11b5f5260045ffd5b93956114819084611a38565b8060018060881b031060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900360018060a01b037f000000000000000000000000000000000000000000000000000000000000000016801561158f576002546103e88101809111610d0357600255805f525f60205260405f206103e881540190555f5f80516020611f9983398151915260206040516103e88152a36103e7198101908111610d03578061158a9197611cc7565b61117a565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b63cd41a9e360e01b5f5260045ffd5b8361110e565b503415611112565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615611102565b6001600160a01b03169081156116d5576001600160a01b03169182156116855760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9060018060a01b0382165f52600160205260405f2060018060a01b0382165f5260205260405f2054925f19840361175e575b50505050565b80841061177957611770930391611622565b5f808080611758565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b6001600160a01b03169081156118ce576001600160a01b031691821561187d57815f525f60205260405f205481811061182957815f80516020611f9983398151915292602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b8261192a610f43565b9190611934611be6565b9561193e91611a38565b9160a0860192835161194f90611a2a565b61195891611a38565b9560600190815161196890611a2a565b96600554978861197791611a38565b61198091611a4b565b9061198a91611085565b60011c956119989087611a38565b90516119a390611a2a565b6119ac91611a38565b91516119b790611a2a565b906119c191611a38565b6119ca91611a4b565b6002546119d692611c93565b916002546119e392611c93565b818110908218021890565b6001600160601b03166107d001906001600160601b038211610d0357565b6001600160601b03166103e801906001600160601b038211610d0357565b604d8111610d0357600a0a90565b81810292918115918404141715610d0357565b8115611a55570490565b634e487b7160e01b5f52601260045260245ffd5b604051632889856360e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190602081600481865afa908115610609575f91611bac575b507f0000000000000000000000000000000000000000000000000000000000000000906001600160601b0380611aee846119ee565b16911602906001600160601b038216918203610d03576001600160601b03168015611a55576020600494604051958680926311d2e12360e21b82525afa938415610609575f94611b76575b50611b72916001600160601b03611b5d92611b55600854611a2a565b920416611a38565b6001600160601b0360065460201c1690611a4b565b9190565b9093506020813d602011611ba4575b81611b9260209383610f0d565b81010312610155575192611b72611b39565b3d9150611b85565b90506020813d602011611bde575b81611bc760209383610f0d565b8101031261015557611bd8906110a3565b5f611ab9565b3d9150611bba565b60405190610160820182811067ffffffffffffffff821117610f2f57604052816001600160601b0360065463ffffffff8116835260201c16602082015260018060a01b03600754166040820152600854606082015260018060a01b03600954166080820152600a5460a08201526001600160601b03600b5463ffffffff811660c0840152818160201c1660e084015260801c16610100820152600c54610120820152610140600d54910152565b8181029181159183041417820215610e2c570490565b818102929181159184041417810215610e2c57808204910615150190565b6001600160a01b031690811561158f575f80516020611f99833981519152602082611cf55f94600254611085565b60025584845283825260408420818154019055604051908152a3565b5f916001600160a01b03811680611db157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b15611dad57604051638340f54960e01b81523060048201526001600160a01b039190911660248201526044810183905291839183916064918391905af18015610ca957611d9b575050565b611da6828092610f0d565b610ca65750565b8380fd5b60209192935060645f9182604051916323b872dd60e01b83523360048401523060248401528760448401525af13d15601f3d1160015f511416171615611e73577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b1561015557604051638340f54960e01b81523060048201526001600160a01b039290921660248301526044820152905f908290606490829084905af1801561060957611e675750565b5f611e7191610f0d565b565b60405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606490fd5b91906001600160a01b031680611f1b57505f80809381935af13d15611f16573d67ffffffffffffffff8111610f2f5760405190611ef6601f8201601f191660200183610f0d565b81525f60203d92013e5b15611f0757565b63386bf62b60e11b5f5260045ffd5b611f00565b60405163a9059cbb60e01b81526001600160a01b03909216600483015260248201929092526020915f9160449183905af13d15601f3d1160015f511416171615611f6157565b60405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606490fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a9f36afb1f575c342e88c865263be0b371d9564b17d031401d4dd5c72b1e035164736f6c634300081a0033",
"deployedBytecode": "0x6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301e1d1141461085e57806306fdde03146107a3578063095ea7b31461077d57806318160ddd1461076057806323b872dd14610728578063313ce5671461070d57806339509351146106bf578063488bd7b0146106855780634cdad5061461064b57806370a08231146106145780637660b1531461042c5780637a7af70d146104095780638dbdbe6d146103d157806394bf804d1461037c57806395d89b4114610278578063a457c2d7146101d5578063a9059cbb146101a4578063b3d7f6b91461015e578063b460af9414610159578063ba087652146101595763dd62ed3e0361000e57346101555760403660031901126101555761011e6108bf565b6101266108d5565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b610901565b3461015557602036600319011261015557604061018e610198600435610182610f43565b93906002549083611ca9565b9260025491611ca9565b82519182526020820152f35b34610155576040366003190112610155576101ca6101c06108bf565b60243590336117be565b602060405160018152f35b34610155576040366003190112610155576101ee6108bf565b60243590335f52600160205260405f2060018060a01b0382165f5260205260405f205491808310610225576101ca92039033611622565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b34610155575f366003190112610155576040515f6004548060011c90600181168015610372575b60208310811461035e5782855290811561033a57506001146102dc575b6102d8836102cc81850382610f0d565b60405191829182610878565b0390f35b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610320575090915081016020016102cc6102bc565b919260018160209254838588010152019101909291610308565b60ff191660208086019190915291151560051b840190910191506102cc90506102bc565b634e487b7160e01b5f52602260045260245ffd5b91607f169161029f565b60403660031901126101555760406103b26103956108d5565b6103c46103bc6004356103a6610f43565b95906002549083611ca9565b9460025491611ca9565b9182846110cb565b5082519182526020820152f35b6060366003190112610155576044356001600160a01b0381168103610155576104016020916024356004356110cb565b604051908152f35b3461015557602061040161041c366108eb565b610424611a69565b929050611921565b34610155575f36600319011261015557604051632432509f60e21b8152610160816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610609575f905f925f915f915f915f915f80915f935f915f91610546575b5090640100000000600160801b039291600d55600c5563ffffffff600b549116936001600160601b0360801b9060801b169063ffffffff60e01b16179160201b161717600b55600a5560018060a01b031660018060a01b0319600954161760095560085560018060a01b031660018060a01b03196007541617600755640100000000600160801b0363ffffffff60065492169260201b169060018060801b03191617176006555f80f35b9a5050505050505050505050610160813d8211610601575b8161056c6101609383610f0d565b810103126101555761057d81611092565b9061058a602082016110a3565b90610597604082016110b7565b926060820151916105aa608082016110b7565b9160a0820151916105bd60c08201611092565b91640100000000600160801b036105d660e084016110a3565b6105e361010085016110a3565b9261014061012086015195015190999a98979695919394919261049c565b3d915061055e565b6040513d5f823e3d90fd5b34610155576020366003190112610155576001600160a01b036106356108bf565b165f525f602052602060405f2054604051908152f35b3461015557602036600319011261015557604061067b61019860043561066f610f43565b93906002549083611c93565b9260025491611c93565b346101555760206106af610698366108eb565b91906106a56106a5610f43565b9260025490611ca9565b8181109082180218604051908152f35b34610155576040366003190112610155576101ca6106db6108bf565b335f52600160205260405f2060018060a01b0382165f5260205261070660405f206024359054611085565b9033611622565b34610155575f36600319011261015557602060405160128152f35b34610155576060366003190112610155576101ca6107446108bf565b61074c6108d5565b6044359161075b833383611726565b6117be565b34610155575f366003190112610155576020600254604051908152f35b34610155576040366003190112610155576101ca6107996108bf565b6024359033611622565b34610155575f366003190112610155576040515f6003548060011c90600181168015610854575b60208310811461035e5782855290811561033a57506001146107f6576102d8836102cc81850382610f0d565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061083a575090915081016020016102cc6102bc565b919260018160209254838588010152019101909291610822565b91607f16916107ca565b34610155575f366003190112610155576040610198610f43565b9190916020815282518060208301525f5b8181106108a9575060409293505f838284010152601f8019910116010190565b8060208092870101516040828601015201610889565b600435906001600160a01b038216820361015557565b602435906001600160a01b038216820361015557565b6040906003190112610155576004359060243590565b34610155576060366003190112610155576024356004356001600160a01b038216820361015557604435906001600160a01b03821690818303610155575f90825f525f60205260405f20548111610efe576109789381843303610eec575b505061098361096c610f43565b95906002549084611c93565b946002549083611c93565b9261098c611a69565b919092869160025480610ed8575b508015610e8957805f525f60205260405f205491808310610e39576020815f80516020611f99833981519152925f958587528684520360408620558060025403600255604051908152a36109ec611be6565b908303928311610d03575f9283925f1914610d96575b604051630445da7b60e51b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919061010081600481865afa938415610609575f915f95610d17575b507f00000000000000000000000000000000000000000000000000000000000000006001600160601b038116610a8b8582611a38565b91602084019283516001600160601b0316610aa591611a38565b90610aaf906119ee565b93606001938451610abf90611a2a565b610ad1916001600160601b0316611a38565b610ada91611a4b565b6001600160601b031694610aed91611a38565b90516001600160601b0316610b0191611a38565b9051610b0c90611a2a565b806107d002906107d0820403610d0357610b306001600160601b0392918392611a4b565b169416821190811591610cef575b50610ce057813b15610155575f6084928195604051978896879563e55bb4e360e01b875260048701526024860152604485015260648401525af1801561060957610ccd575b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090823b15610ca657604051627b8a6760e11b8152600481018690526001600160a01b0383166024820152818160448183885af18015610ca957908291610cb8575b50507f000000000000000000000000000000000000000000000000000000000000000092803b15610cb457604051627b8a6760e11b8152600481018690526001600160a01b03851660248201529082908290604490829084905af18015610ca957610c91575b50509361019891610c8b8260409787611eaf565b83611eaf565b610c9c828092610f0d565b610ca65780610c77565b80fd5b6040513d84823e3d90fd5b5080fd5b81610cc291610f0d565b610ca657805f610c11565b610cd991505f90610f0d565b5f80610b83565b636a2628d960e01b5f5260045ffd5b6001600160601b039150168311155f610b3e565b634e487b7160e01b5f52601160045260245ffd5b91509350610100813d8211610d8e575b81610d356101009383610f0d565b8101031261015557610d46816110b7565b50610d53604082016110a3565b610d8560e0610d64608085016110a3565b93610d7160a082016110a3565b50610d7e60c082016110a3565b50016110a3565b5090935f610a55565b3d9150610d27565b819350809250610dd7610dce610dbb610db56060610ddc960151611a2a565b89611a38565b610dc860a0880151611a2a565b90611a4b565b60055490611a38565b611a4b565b916001600160601b03610e0e7f0000000000000000000000000000000000000000000000000000000000000000611a0c565b166103e88402816103e8868304148615170215610e2c570491610a02565b63ad251c275f526004601cfd5b60405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b610ee59193508583611c93565b915f61099a565b610ef7913390611726565b5f8161095f565b631e9acf1760e31b5f5260045ffd5b90601f8019910116810190811067ffffffffffffffff821117610f2f57604052565b634e487b7160e01b5f52604160045260245ffd5b60405163d4fac45d60e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169190602081604481865afa908115610609575f91611053575b5060405163d4fac45d60e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602482015292602090849060449082905afa928315610609575f9361102357509190565b9092506020813d60201161104b575b8161103f60209383610f0d565b81010312610155575190565b3d9150611032565b90506020813d60201161107d575b8161106e60209383610f0d565b8101031261015557515f610fc1565b3d9150611061565b91908201809211610d0357565b519063ffffffff8216820361015557565b51906001600160601b038216820361015557565b51906001600160a01b038216820361015557565b90917f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b038316158080156115f1575b156115e957156115e357805b3410155b156115d4578392611121611a69565b6002549195909115611475575061115d6111526111416005548487611ca9565b61114c600a54611a2a565b90611a38565b610dc8600854611a2a565b9586116114665761117a611172828886611921565b809795611cc7565b8515611457576111928361118c611be6565b96611085565b945f955f925f19146113db575b604051630445da7b60e51b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316919061010081600481865afa938415610609575f915f9561137d575b507f00000000000000000000000000000000000000000000000000000000000000006001600160601b0381166112288582611a38565b91602084019283516001600160601b031661124291611a38565b9061124c906119ee565b9360600193845161125c90611a2a565b61126e916001600160601b0316611a38565b61127791611a4b565b6001600160601b03169461128a91611a38565b90516001600160601b031661129e91611a38565b90516112a990611a2a565b806107d002906107d0820403610d03576112cd6001600160601b0392918392611a4b565b169416821190811591611369575b50610ce057813b15610155575f60849281956040519a8b96879563e55bb4e360e01b875260048701526024860152604485015260648401525af1918215610609576113569461132f93611359575b50611d11565b7f000000000000000000000000000000000000000000000000000000000000000090611d11565b90565b5f61136391610f0d565b5f611329565b6001600160601b039150168311155f6112db565b91509350610100813d82116113d3575b8161139b6101009383610f0d565b81010312610155576113ac816110b7565b506113b9604082016110a3565b6113ca60e0610d64608085016110a3565b5090935f6111f2565b3d915061138d565b819650809250610dd7610dce6113fa610db56060611407960151611a2a565b610dc860a08b0151611a2a565b946001600160601b036114397f0000000000000000000000000000000000000000000000000000000000000000611a0c565b166103e88702816103e8898304148915170215610e2c57049161119f565b633489be7560e21b5f5260045ffd5b635cc39c2360e11b5f5260045ffd5b93956114819084611a38565b8060018060881b031060071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1760b56201000083831c019160011c1b0260121c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8082040160011c8080920410900360018060a01b037f000000000000000000000000000000000000000000000000000000000000000016801561158f576002546103e88101809111610d0357600255805f525f60205260405f206103e881540190555f5f80516020611f9983398151915260206040516103e88152a36103e7198101908111610d03578061158a9197611cc7565b61117a565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b63cd41a9e360e01b5f5260045ffd5b8361110e565b503415611112565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615611102565b6001600160a01b03169081156116d5576001600160a01b03169182156116855760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9060018060a01b0382165f52600160205260405f2060018060a01b0382165f5260205260405f2054925f19840361175e575b50505050565b80841061177957611770930391611622565b5f808080611758565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b6001600160a01b03169081156118ce576001600160a01b031691821561187d57815f525f60205260405f205481811061182957815f80516020611f9983398151915292602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b8261192a610f43565b9190611934611be6565b9561193e91611a38565b9160a0860192835161194f90611a2a565b61195891611a38565b9560600190815161196890611a2a565b96600554978861197791611a38565b61198091611a4b565b9061198a91611085565b60011c956119989087611a38565b90516119a390611a2a565b6119ac91611a38565b91516119b790611a2a565b906119c191611a38565b6119ca91611a4