{"matchId":"57400092","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-10-28T14:53:36Z","creationBytecode":{"onchainBytecode":"0x6080806040523460155761214f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c80630a09284a14611a7b5780630d9019e114611a4d5780631274c3f314611a305780631462783414611a025780631b2df850146119d95780631ca104a9146119bf5780631d073a7a146119915780631fe543e31461195457806328c13a1c1461193657806330e1198b146118f15780633370eb7d146118535780633471fd3e14611836578063379607f51461180057806339018b8e146117595780633ba86c441461173f578063444897ff1461172257806347e405531461170557806349631c17146116e45780635661b7171461151e578063599a949e146115015780635ed73d59146114e5578063676bab0114610f98578063778062a114610f6957806382fadcc214610f3f578063865e0d4814610ef75780638661024b14610edb5780638b3e047614610ebe5780638c65c81f14610e005780638f82543f14610de257806391dd734614610c275780639655647514610c0957806396b24c0014610bee5780639779ea4614610bd057806398bc402d14610b0e5780639f34fc8014610af0578063a06890311461065d578063a6cf7f101461063f578063a779119614610600578063a7b573ca146105e2578063aaac0462146105a3578063b17acdcd146103f0578063ca6015db146103d4578063dc88d0cf146102c3578063e74e607b146102a6578063f11e547d1461025d578063f1e05eb71461023f5763f21f537d1461021f575f80fd5b3461023c578060031936011261023c576020600454604051908152f35b80fd5b503461023c578060031936011261023c576020600d54604051908152f35b503461023c57604036600319011261023c5760209060ff906040906001600160a01b03610288611adc565b16815260038452818120602435825284522054166040519015158152f35b503461023c578060031936011261023c5760206040516103e88152f35b503461023c5760c036600319011261023c576102dd611adc565b506024358015150361023c576064356001600160a01b0381160361023c576084356fffffffffffffffffffffffffffffffff81160361023c5760a43567ffffffffffffffff81116103d057610336903690600401611af2565b505060c090816040516103498282611cda565b36903760405182810181811067ffffffffffffffff8211176103bc576040908152612ee08252610bb860208301526105dc8282015260608201839052610dac60808301526107d060a08301525191825b600682106103a657505050f35b6020806001928551815201930191019091610399565b634e487b7160e01b83526041600452602483fd5b5080fd5b503461023c578060031936011261023c576020604051602a8152f35b503461023c57602036600319011261023c576004358015801561058c575b6104ea5761041a6120f5565b61042681600c54611b44565b600c55600e5461057d576001600e5561048d82604051735a428ea2f282effbf15baa87f1437f8c2f4fd99560208201528360408201526040815261046b606082611cda565b604051809381926348c8949160e01b8352602060048401526024830190611b20565b0381836e04444c5dc75cb358380d2e3de08a905af18015610572576104f9575b506002600e54036104ea5760207f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f9183600e55604051908152a180f35b63b4fa3fb360e01b8252600482fd5b823d8082843e6105098184611cda565b8201916020818403126103d05780519067ffffffffffffffff821161056e570182601f820112156103d057805161053f81611d28565b9361054d6040519586611cda565b8185526020828401011161056e578060208093018386015e830101526104ad565b8280fd5b6040513d85823e3d90fd5b634a44555360e11b8252600482fd5b5061059c600b54600c5490611b84565b811161040e565b503461023c578060031936011261023c576105bc611b64565b4211156105d357602a6006556105d0612002565b80f35b634a44555360e11b8152600490fd5b503461023c578060031936011261023c576020600b54604051908152f35b503461023c57606036600319011261023c57604435906001600160a01b038216820361023c57602061063783602435600435611dd3565b604051908152f35b503461023c578060031936011261023c576020600c54604051908152f35b50608036600319011261023c5760043560243560443563ffffffff8116809103610aec57606435738aca8890d34086d7a30b9c06fae25e0c3cda4cfa3303610ade576006548414801590610acd575b8015610abd575b610aae5780158015610aa2575b610a935783855284602052604085209060028201805460ff8160201c16610a705785845564ffffffffff1916841764010000000017815560018084018390558601808711610a7f578060065584155f146107a7575034610798579160a093917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e359593600160301b66ff000000000000198254161790555b602a6006541461078b575b60066003830154920154926040519485526020850152604084015260608301526080820152a280f35b610793612002565b610762565b63b4fa3fb360e01b8752600487fd5b90506107b16120f5565b8060075560085460068401558660085560038301908154610a70576040516313c34b7f60e01b8152620186a0600482015260016024820152916020836044817302aae1a04f9828517b3007f83f6181900cad910c5afa928315610a65578993610a31575b50823410610a22579061088291602060405163125fa26760e31b828201526001602482015260248152610849604482611cda565b60405180958192634e7e02c760e11b8352620186a060048401526003602484015260016044840152608060648401526084830190611b20565b0381877302aae1a04f9828517b3007f83f6181900cad910c5af1928315610a17578a936109df575b50821580156109ca575b6109bb5790828a94939255888452600160205242604085205581845260026020526040842055877fe09cad433de20c7c5706a5b423836068ff0ebf2ce5e2466fd10dd811aa85f4746020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152a380341161094f575b5050917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e35939160a093610757565b818061095c819334611b84565b738aca8890d34086d7a30b9c06fae25e0c3cda4cfa5af13d156109b6573d61098381611d28565b906109916040519283611cda565b81528760203d92013e5b156109a757855f610921565b63b4fa3fb360e01b8652600486fd5b61099b565b63b4fa3fb360e01b8a5260048afd5b50828a52600260205260408a205415156108b4565b9092506020813d602011610a0f575b816109fb60209383611cda565b81010312610a0b5751915f6108aa565b5f80fd5b3d91506109ee565b6040513d8c823e3d90fd5b63b4fa3fb360e01b8952600489fd5b9092506020813d602011610a5d575b81610a4d60209383611cda565b81010312610a0b5751915f610815565b3d9150610a40565b6040513d8b823e3d90fd5b630bdb902160e41b8852600488fd5b634e487b7160e01b88526011600452602488fd5b63b4fa3fb360e01b8552600485fd5b508215821514156106c0565b634a44555360e11b8552600485fd5b50610ac6611b64565b42116106b3565b50610ad784611c92565b42106106ac565b6282b42960e81b8552600485fd5b8380fd5b503461023c578060031936011261023c57602060405162278d008152f35b503461023c57602036600319011261023c57600435610b2b611d10565b42111561057d5780825281602052604082206006810154906007810191610b53835482611b84565b928315610bc15755600201805466ff0000000000001916600160301b1790556009547f8b15a0b729ab84887af301417db9dd9744f4247286bbe82ff3bf3fcb6d785e0991602091610ba5908290611b84565b600955610bb481600b54611b44565b600b55604051908152a280f35b630bdb902160e41b8652600486fd5b503461023c578060031936011261023c576020604051620186a08152f35b503461023c578060031936011261023c576020610637611d63565b503461023c578060031936011261023c57602060405162093a808152f35b503461023c57602036600319011261023c5760043567ffffffffffffffff81116103d057610c59903690600401611af2565b6e04444c5dc75cb358380d2e3de08a903314801590610dd5575b8015610dca575b610dbc5781604091810103126103d05780356001600160a01b038116919082900361056e57602001356002600e556e04444c5dc75cb358380d2e3de08a903b1561056e5782604051637a94c56560e11b81523060048201528160248201528260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610da7575b50506e04444c5dc75cb358380d2e3de08a903b1561056e5760405191630b0d9c0960e01b8352836004840152602483015260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610d87575b610d838260405190610d6d602083611cda565b8152604051918291602083526020830190611b20565b0390f35b610d92828092611cda565b61023c575f610d5a565b6040513d84823e3d90fd5b81610db191611cda565b61056e57825f610d01565b6282b42960e81b8352600483fd5b506040811415610c7a565b506001600e541415610c73565b503461023c578060031936011261023c576020600854604051908152f35b503461023c57602036600319011261023c57604061018091600435815280602052208054906001810154906002810154600382015460048301549060ff60018060a01b03600586015416936007600687015496015496604051988952602089015263ffffffff81166040890152818160201c1615156060890152818160281c1615156080890152818160301c16151560a089015260381c16151560c087015260e0860152610100850152610120840152610140830152610160820152f35b503461023c578060031936011261023c5760206040516138408152f35b503461023c578060031936011261023c57602060405160018152f35b503461023c578060031936011261023c5760c060045460065460085460075460095491600a5493604051958652602086015260408501526060840152608083015260a0820152f35b503461023c57602036600319011261023c5760406020916004358152600183522054604051908152f35b503461023c578060031936011261023c5760206040517302aae1a04f9828517b3007f83f6181900cad910c8152f35b5034610a0b5736600319016101808112610a0b5761016013610a0b576101643567ffffffffffffffff8111610a0b57610fd5903690600401611af2565b9060405163040dda0f60e01b815230600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f916114a3575b506001600160a01b03163314801590611417575b611409576024356001600160a01b03811690819003610a0b573314918215926113e5575b821561139e575b50508015611392575b6112d257611068611d44565b8061137f575b801561135c575b6112d257611081611d44565b1561134b5761108e611d53565b600f0b600160ff1b8114611303576110ab9060c435905f03611b44565b905b600454801515908161133d575b508061132a575b15611324576103e860c435045b60e43592838211908115611317575b81156112e1575b506112d2576110f1611d63565b6111218461111c61111361110a600b54600c5490611b84565b60095490611b44565b600a5490611b84565b611b44565b116112c357335f52600360205260405f209061116261115a82600435968795865f5260205260405f20600160ff19825416179055611b84565b600b54611b44565b600b5561117181600954611b44565b60095561118081600854611b44565b60085580611291575b5050602a60065414611284575b6111a5600b54600c5490611b84565b90662386f26fc1000082101580611278575b6111ce575b60405163676bab0160e01b8152602090f35b303b15610a0b5760405163b17acdcd60e01b8152600481018390525f816024818330620249f0f19081611263575b5061125b57610e1042019081421161124757507fff7e1fe0c585e56c3169651fd1510e02bd4c92bfde2886b1d4bbb64a6795071b91602091600d55604051908152a25b5f80806111bc565b634e487b7160e01b81526011600452602490fd5b50505061123f565b6112709192505f90611cda565b5f905f6111fc565b50600d544210156111b7565b61128c612002565b611196565b60207faf87dee8e5fc8fe28a934a5511071c36c94b4fe63a8c4fc1c5e737e8ebef435a91604051908152a2815f611189565b6340db7f8760e01b5f5260045ffd5b63b4fa3fb360e01b5f5260045ffd5b6107d08082029250811591830414171561130357620f4240900483105f6110e4565b634e487b7160e01b5f52601160045260245ffd5b90508360c43510906110dd565b5f6110ce565b50611333611b51565b61012435106110c1565b90506101243510155f6110ba565b611353611d53565b600f0b906110ad565b50611365611d44565b15801561107557505f611376611d53565b600f0b12611075565b505f611389611d53565b600f0b1361106e565b5042610124351161105c565b9091506113aa81611d28565b906113b86040519283611cda565b80825260208201923682820111610a0b57815f926020928637830101525190206101443514155f80611053565b9150335f52600360205260405f206004355f5260205260ff60405f2054169161104c565b6282b42960e81b5f5260045ffd5b5060405163218d105760e11b815233600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f9161145d575b5015611028565b90506020813d602011611490575b8161147860209383611cda565b81010312610a0b57518015158103610a0b575f611456565b3d915061146b565b6040513d5f823e3d90fd5b90506020813d6020116114dd575b816114be60209383611cda565b81010312610a0b57516001600160a01b0381168103610a0b575f611014565b3d91506114b1565b34610a0b575f366003190112610a0b576020604051610e108152f35b34610a0b575f366003190112610a0b576020600754604051908152f35b34610a0b576060366003190112610a0b5760043561153a611ac6565b60443567ffffffffffffffff8111610a0b5761155a903690600401611a95565b9190611564611d10565b42116116c757835f525f60205260405f206002810180549360ff8560281c161580156116d6575b6116c75760ff8560301c166116b8576001600160a01b03811680156112d257600484015463ffffffff871680156116a4576115c9910692838a611dd3565b955f965b8888101561163b576001908860051b8801358082105f14611613576040519060208201928352604082015260408152611607606082611cda565b5190205b9701966115cd565b906040519060208201928352604082015260408152611633606082611cda565b51902061160b565b8996508554036112d2577f782732c32ed29ecd5b56192acdf24a69cdc255996ccb806866caf1d05eca970294604094600160301b60059366ff000000000000191617905501816bffffffffffffffffffffffff60a01b82541617905582519182526020820152a2005b634e487b7160e01b5f52601260045260245ffd5b630bdb902160e41b5f5260045ffd5b634a44555360e11b5f5260045ffd5b5063ffffffff85161561158b565b34610a0b575f366003190112610a0b576020604051662386f26fc100008152f35b34610a0b575f366003190112610a0b576020600654604051908152f35b34610a0b575f366003190112610a0b576020600a54604051908152f35b34610a0b575f366003190112610a0b576020610637611d10565b34610a0b576040366003190112610a0b57602435600435738aca8890d34086d7a30b9c06fae25e0c3cda4cf9193301611409576004546116b857801580156117f6575b80156117e1575b6112d257816040917fda99f424f4b343b171a6bab0571655e865e7366818c5c87fd9118dbc731a98a9936004558060055582519182526020820152a1005b5062093a8042018042116113035782116117a3565b504282111561179c565b34610a0b576020366003190112610a0b57611834600435805f525f60205260018060a01b03600560405f2001541690611e2e565b005b34610a0b575f366003190112610a0b576020600954604051908152f35b34610a0b576020366003190112610a0b5760405163e1cab74560e01b8152620186a060048201526001602482015260043560448201526020816064817302aae1a04f9828517b3007f83f6181900cad910c5afa8015611498575f906118be575b602090604051908152f35b506020813d6020116118e9575b816118d860209383611cda565b81010312610a0b57602090516118b3565b3d91506118cb565b34610a0b576040366003190112610a0b5760043561190d611ac6565b5f828152602081905260409020600501546001600160a01b031633036114095761183491611e2e565b34610a0b576020366003190112610a0b576020610637600435611c92565b34610a0b576040366003190112610a0b5760243567ffffffffffffffff8111610a0b57611988611834913690600401611a95565b90600435611b91565b34610a0b575f366003190112610a0b576020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152f35b34610a0b575f366003190112610a0b576020610637611b64565b34610a0b575f366003190112610a0b5760206040516e04444c5dc75cb358380d2e3de08a908152f35b34610a0b575f366003190112610a0b57602060405173180eae784dee739fbab432b06f78bf9a98aae3348152f35b34610a0b575f366003190112610a0b576020600554604051908152f35b34610a0b575f366003190112610a0b576020604051735a428ea2f282effbf15baa87f1437f8c2f4fd9958152f35b34610a0b575f366003190112610a0b576020610637611b51565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b576020808501948460051b010111610a0b57565b602435906001600160a01b0382168203610a0b57565b600435906001600160a01b0382168203610a0b57565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b5760208381860195010111610a0b57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9190820180921161130357565b60045462093a8081018091116113035790565b600454156116c757611b74611b51565b62093a8081018091116113035790565b9190820391821161130357565b91907302aae1a04f9828517b3007f83f6181900cad910c330361140957825f52600260205260405f20549182158015611c87575b611c81575f19830192831161130357825f525f60205260405f209060038201548514801590611c70575b8015611c5f575b611c585715611c445790356004820155600201805465ff00000000001916650100000000001790557f4235fc540c899ae91eade70d636591126a477a30a8dc25ae4489f396de2a51035f80a3565b634e487b7160e01b5f52603260045260245ffd5b5050505050565b5060ff600283015460301c16611bf6565b5060ff600283015460281c16611bef565b50505050565b506001811415611bc5565b6004549081158015611ccf575b6112d2576001810180911161130357613840810290808204613840149015171561130357611ccc91611b44565b90565b50602a811015611c9f565b90601f8019910116810190811067ffffffffffffffff821117611cfc57604052565b634e487b7160e01b5f52604160045260245ffd5b611d18611b64565b62278d0081018091116113035790565b67ffffffffffffffff8111611cfc57601f01601f191660200190565b6064358015158103610a0b5790565b60843580600f0b8103610a0b5790565b604051627eeac760e11b81523060048201525f60248201526020816044816e04444c5dc75cb358380d2e3de08a905afa908115611498575f91611da4575090565b90506020813d602011611dcb575b81611dbf60209383611cda565b81010312610a0b575190565b3d9150611db2565b916040519160208301934685523060408501526060840152608083015260018060a01b031660a082015260a08152611e0c60c082611cda565b5190206040516020810191825260208152611e28604082611cda565b51902090565b611e36611d10565b42116116c757805f525f60205260405f206002810180549060ff8260301c16158015611fed575b8015611fdc575b6116c7576006830154916007840190611e7e825485611b84565b9384156116b85767010000000000000092611e976120f5565b5567ff000000000000001916179055611eb281600a54611b44565b600a55600e546116c7576001600e55604080516001600160a01b0386166020820152808201839052908152611eee905f9061046b606082611cda565b0381836e04444c5dc75cb358380d2e3de08a905af1801561149857611f65575b506002600e54036112d2575f600e5560059190910154604080516001600160a01b03958616815260208101939093529316927f5eab6cc13df174a3d427c8f1bbb105e9f5ac31770edd88092331527d9c8fdd6591a3565b3d805f833e611f748183611cda565b810190602081830312610a0b5780519067ffffffffffffffff8211610a0b570181601f82011215610a0b57805190611fab82611d28565b92611fb96040519485611cda565b82845260208383010111610a0b57815f9260208093018386015e83010152611f0e565b506001600160a01b03851615611e64565b5060058301546001600160a01b031615611e5d565b60085480156120f2575f6008556007541515806120e1575b15612096576007545f198101908111611303575f525f602052600260405f2060068101612048848254611b44565b905501805467ff00000000000000191690556007545f198101919082116113035760207fc783854938299dc57460deb40a0fa35b35f08f154d7b2b0ef262bfaa12527cca91604051908152a2565b6020816120c67f3e0eacaa869e03ca54b3ff68315fe703b02a91c5cff5a032eeb830aa0e8a57b093600954611b84565b6009556120d581600b54611b44565b600b55604051908152a1565b506120ea611d10565b42111561201a565b50565b6120fd611d63565b61211261111361110a600b54600c5490611b84565b116112c35756fea264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","recompiledBytecode":"0x6080806040523460155761214f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c80630a09284a14611a7b5780630d9019e114611a4d5780631274c3f314611a305780631462783414611a025780631b2df850146119d95780631ca104a9146119bf5780631d073a7a146119915780631fe543e31461195457806328c13a1c1461193657806330e1198b146118f15780633370eb7d146118535780633471fd3e14611836578063379607f51461180057806339018b8e146117595780633ba86c441461173f578063444897ff1461172257806347e405531461170557806349631c17146116e45780635661b7171461151e578063599a949e146115015780635ed73d59146114e5578063676bab0114610f98578063778062a114610f6957806382fadcc214610f3f578063865e0d4814610ef75780638661024b14610edb5780638b3e047614610ebe5780638c65c81f14610e005780638f82543f14610de257806391dd734614610c275780639655647514610c0957806396b24c0014610bee5780639779ea4614610bd057806398bc402d14610b0e5780639f34fc8014610af0578063a06890311461065d578063a6cf7f101461063f578063a779119614610600578063a7b573ca146105e2578063aaac0462146105a3578063b17acdcd146103f0578063ca6015db146103d4578063dc88d0cf146102c3578063e74e607b146102a6578063f11e547d1461025d578063f1e05eb71461023f5763f21f537d1461021f575f80fd5b3461023c578060031936011261023c576020600454604051908152f35b80fd5b503461023c578060031936011261023c576020600d54604051908152f35b503461023c57604036600319011261023c5760209060ff906040906001600160a01b03610288611adc565b16815260038452818120602435825284522054166040519015158152f35b503461023c578060031936011261023c5760206040516103e88152f35b503461023c5760c036600319011261023c576102dd611adc565b506024358015150361023c576064356001600160a01b0381160361023c576084356fffffffffffffffffffffffffffffffff81160361023c5760a43567ffffffffffffffff81116103d057610336903690600401611af2565b505060c090816040516103498282611cda565b36903760405182810181811067ffffffffffffffff8211176103bc576040908152612ee08252610bb860208301526105dc8282015260608201839052610dac60808301526107d060a08301525191825b600682106103a657505050f35b6020806001928551815201930191019091610399565b634e487b7160e01b83526041600452602483fd5b5080fd5b503461023c578060031936011261023c576020604051602a8152f35b503461023c57602036600319011261023c576004358015801561058c575b6104ea5761041a6120f5565b61042681600c54611b44565b600c55600e5461057d576001600e5561048d82604051735a428ea2f282effbf15baa87f1437f8c2f4fd99560208201528360408201526040815261046b606082611cda565b604051809381926348c8949160e01b8352602060048401526024830190611b20565b0381836e04444c5dc75cb358380d2e3de08a905af18015610572576104f9575b506002600e54036104ea5760207f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f9183600e55604051908152a180f35b63b4fa3fb360e01b8252600482fd5b823d8082843e6105098184611cda565b8201916020818403126103d05780519067ffffffffffffffff821161056e570182601f820112156103d057805161053f81611d28565b9361054d6040519586611cda565b8185526020828401011161056e578060208093018386015e830101526104ad565b8280fd5b6040513d85823e3d90fd5b634a44555360e11b8252600482fd5b5061059c600b54600c5490611b84565b811161040e565b503461023c578060031936011261023c576105bc611b64565b4211156105d357602a6006556105d0612002565b80f35b634a44555360e11b8152600490fd5b503461023c578060031936011261023c576020600b54604051908152f35b503461023c57606036600319011261023c57604435906001600160a01b038216820361023c57602061063783602435600435611dd3565b604051908152f35b503461023c578060031936011261023c576020600c54604051908152f35b50608036600319011261023c5760043560243560443563ffffffff8116809103610aec57606435738aca8890d34086d7a30b9c06fae25e0c3cda4cfa3303610ade576006548414801590610acd575b8015610abd575b610aae5780158015610aa2575b610a935783855284602052604085209060028201805460ff8160201c16610a705785845564ffffffffff1916841764010000000017815560018084018390558601808711610a7f578060065584155f146107a7575034610798579160a093917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e359593600160301b66ff000000000000198254161790555b602a6006541461078b575b60066003830154920154926040519485526020850152604084015260608301526080820152a280f35b610793612002565b610762565b63b4fa3fb360e01b8752600487fd5b90506107b16120f5565b8060075560085460068401558660085560038301908154610a70576040516313c34b7f60e01b8152620186a0600482015260016024820152916020836044817302aae1a04f9828517b3007f83f6181900cad910c5afa928315610a65578993610a31575b50823410610a22579061088291602060405163125fa26760e31b828201526001602482015260248152610849604482611cda565b60405180958192634e7e02c760e11b8352620186a060048401526003602484015260016044840152608060648401526084830190611b20565b0381877302aae1a04f9828517b3007f83f6181900cad910c5af1928315610a17578a936109df575b50821580156109ca575b6109bb5790828a94939255888452600160205242604085205581845260026020526040842055877fe09cad433de20c7c5706a5b423836068ff0ebf2ce5e2466fd10dd811aa85f4746020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152a380341161094f575b5050917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e35939160a093610757565b818061095c819334611b84565b738aca8890d34086d7a30b9c06fae25e0c3cda4cfa5af13d156109b6573d61098381611d28565b906109916040519283611cda565b81528760203d92013e5b156109a757855f610921565b63b4fa3fb360e01b8652600486fd5b61099b565b63b4fa3fb360e01b8a5260048afd5b50828a52600260205260408a205415156108b4565b9092506020813d602011610a0f575b816109fb60209383611cda565b81010312610a0b5751915f6108aa565b5f80fd5b3d91506109ee565b6040513d8c823e3d90fd5b63b4fa3fb360e01b8952600489fd5b9092506020813d602011610a5d575b81610a4d60209383611cda565b81010312610a0b5751915f610815565b3d9150610a40565b6040513d8b823e3d90fd5b630bdb902160e41b8852600488fd5b634e487b7160e01b88526011600452602488fd5b63b4fa3fb360e01b8552600485fd5b508215821514156106c0565b634a44555360e11b8552600485fd5b50610ac6611b64565b42116106b3565b50610ad784611c92565b42106106ac565b6282b42960e81b8552600485fd5b8380fd5b503461023c578060031936011261023c57602060405162278d008152f35b503461023c57602036600319011261023c57600435610b2b611d10565b42111561057d5780825281602052604082206006810154906007810191610b53835482611b84565b928315610bc15755600201805466ff0000000000001916600160301b1790556009547f8b15a0b729ab84887af301417db9dd9744f4247286bbe82ff3bf3fcb6d785e0991602091610ba5908290611b84565b600955610bb481600b54611b44565b600b55604051908152a280f35b630bdb902160e41b8652600486fd5b503461023c578060031936011261023c576020604051620186a08152f35b503461023c578060031936011261023c576020610637611d63565b503461023c578060031936011261023c57602060405162093a808152f35b503461023c57602036600319011261023c5760043567ffffffffffffffff81116103d057610c59903690600401611af2565b6e04444c5dc75cb358380d2e3de08a903314801590610dd5575b8015610dca575b610dbc5781604091810103126103d05780356001600160a01b038116919082900361056e57602001356002600e556e04444c5dc75cb358380d2e3de08a903b1561056e5782604051637a94c56560e11b81523060048201528160248201528260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610da7575b50506e04444c5dc75cb358380d2e3de08a903b1561056e5760405191630b0d9c0960e01b8352836004840152602483015260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610d87575b610d838260405190610d6d602083611cda565b8152604051918291602083526020830190611b20565b0390f35b610d92828092611cda565b61023c575f610d5a565b6040513d84823e3d90fd5b81610db191611cda565b61056e57825f610d01565b6282b42960e81b8352600483fd5b506040811415610c7a565b506001600e541415610c73565b503461023c578060031936011261023c576020600854604051908152f35b503461023c57602036600319011261023c57604061018091600435815280602052208054906001810154906002810154600382015460048301549060ff60018060a01b03600586015416936007600687015496015496604051988952602089015263ffffffff81166040890152818160201c1615156060890152818160281c1615156080890152818160301c16151560a089015260381c16151560c087015260e0860152610100850152610120840152610140830152610160820152f35b503461023c578060031936011261023c5760206040516138408152f35b503461023c578060031936011261023c57602060405160018152f35b503461023c578060031936011261023c5760c060045460065460085460075460095491600a5493604051958652602086015260408501526060840152608083015260a0820152f35b503461023c57602036600319011261023c5760406020916004358152600183522054604051908152f35b503461023c578060031936011261023c5760206040517302aae1a04f9828517b3007f83f6181900cad910c8152f35b5034610a0b5736600319016101808112610a0b5761016013610a0b576101643567ffffffffffffffff8111610a0b57610fd5903690600401611af2565b9060405163040dda0f60e01b815230600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f916114a3575b506001600160a01b03163314801590611417575b611409576024356001600160a01b03811690819003610a0b573314918215926113e5575b821561139e575b50508015611392575b6112d257611068611d44565b8061137f575b801561135c575b6112d257611081611d44565b1561134b5761108e611d53565b600f0b600160ff1b8114611303576110ab9060c435905f03611b44565b905b600454801515908161133d575b508061132a575b15611324576103e860c435045b60e43592838211908115611317575b81156112e1575b506112d2576110f1611d63565b6111218461111c61111361110a600b54600c5490611b84565b60095490611b44565b600a5490611b84565b611b44565b116112c357335f52600360205260405f209061116261115a82600435968795865f5260205260405f20600160ff19825416179055611b84565b600b54611b44565b600b5561117181600954611b44565b60095561118081600854611b44565b60085580611291575b5050602a60065414611284575b6111a5600b54600c5490611b84565b90662386f26fc1000082101580611278575b6111ce575b60405163676bab0160e01b8152602090f35b303b15610a0b5760405163b17acdcd60e01b8152600481018390525f816024818330620249f0f19081611263575b5061125b57610e1042019081421161124757507fff7e1fe0c585e56c3169651fd1510e02bd4c92bfde2886b1d4bbb64a6795071b91602091600d55604051908152a25b5f80806111bc565b634e487b7160e01b81526011600452602490fd5b50505061123f565b6112709192505f90611cda565b5f905f6111fc565b50600d544210156111b7565b61128c612002565b611196565b60207faf87dee8e5fc8fe28a934a5511071c36c94b4fe63a8c4fc1c5e737e8ebef435a91604051908152a2815f611189565b6340db7f8760e01b5f5260045ffd5b63b4fa3fb360e01b5f5260045ffd5b6107d08082029250811591830414171561130357620f4240900483105f6110e4565b634e487b7160e01b5f52601160045260245ffd5b90508360c43510906110dd565b5f6110ce565b50611333611b51565b61012435106110c1565b90506101243510155f6110ba565b611353611d53565b600f0b906110ad565b50611365611d44565b15801561107557505f611376611d53565b600f0b12611075565b505f611389611d53565b600f0b1361106e565b5042610124351161105c565b9091506113aa81611d28565b906113b86040519283611cda565b80825260208201923682820111610a0b57815f926020928637830101525190206101443514155f80611053565b9150335f52600360205260405f206004355f5260205260ff60405f2054169161104c565b6282b42960e81b5f5260045ffd5b5060405163218d105760e11b815233600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f9161145d575b5015611028565b90506020813d602011611490575b8161147860209383611cda565b81010312610a0b57518015158103610a0b575f611456565b3d915061146b565b6040513d5f823e3d90fd5b90506020813d6020116114dd575b816114be60209383611cda565b81010312610a0b57516001600160a01b0381168103610a0b575f611014565b3d91506114b1565b34610a0b575f366003190112610a0b576020604051610e108152f35b34610a0b575f366003190112610a0b576020600754604051908152f35b34610a0b576060366003190112610a0b5760043561153a611ac6565b60443567ffffffffffffffff8111610a0b5761155a903690600401611a95565b9190611564611d10565b42116116c757835f525f60205260405f206002810180549360ff8560281c161580156116d6575b6116c75760ff8560301c166116b8576001600160a01b03811680156112d257600484015463ffffffff871680156116a4576115c9910692838a611dd3565b955f965b8888101561163b576001908860051b8801358082105f14611613576040519060208201928352604082015260408152611607606082611cda565b5190205b9701966115cd565b906040519060208201928352604082015260408152611633606082611cda565b51902061160b565b8996508554036112d2577f782732c32ed29ecd5b56192acdf24a69cdc255996ccb806866caf1d05eca970294604094600160301b60059366ff000000000000191617905501816bffffffffffffffffffffffff60a01b82541617905582519182526020820152a2005b634e487b7160e01b5f52601260045260245ffd5b630bdb902160e41b5f5260045ffd5b634a44555360e11b5f5260045ffd5b5063ffffffff85161561158b565b34610a0b575f366003190112610a0b576020604051662386f26fc100008152f35b34610a0b575f366003190112610a0b576020600654604051908152f35b34610a0b575f366003190112610a0b576020600a54604051908152f35b34610a0b575f366003190112610a0b576020610637611d10565b34610a0b576040366003190112610a0b57602435600435738aca8890d34086d7a30b9c06fae25e0c3cda4cf9193301611409576004546116b857801580156117f6575b80156117e1575b6112d257816040917fda99f424f4b343b171a6bab0571655e865e7366818c5c87fd9118dbc731a98a9936004558060055582519182526020820152a1005b5062093a8042018042116113035782116117a3565b504282111561179c565b34610a0b576020366003190112610a0b57611834600435805f525f60205260018060a01b03600560405f2001541690611e2e565b005b34610a0b575f366003190112610a0b576020600954604051908152f35b34610a0b576020366003190112610a0b5760405163e1cab74560e01b8152620186a060048201526001602482015260043560448201526020816064817302aae1a04f9828517b3007f83f6181900cad910c5afa8015611498575f906118be575b602090604051908152f35b506020813d6020116118e9575b816118d860209383611cda565b81010312610a0b57602090516118b3565b3d91506118cb565b34610a0b576040366003190112610a0b5760043561190d611ac6565b5f828152602081905260409020600501546001600160a01b031633036114095761183491611e2e565b34610a0b576020366003190112610a0b576020610637600435611c92565b34610a0b576040366003190112610a0b5760243567ffffffffffffffff8111610a0b57611988611834913690600401611a95565b90600435611b91565b34610a0b575f366003190112610a0b576020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152f35b34610a0b575f366003190112610a0b576020610637611b64565b34610a0b575f366003190112610a0b5760206040516e04444c5dc75cb358380d2e3de08a908152f35b34610a0b575f366003190112610a0b57602060405173180eae784dee739fbab432b06f78bf9a98aae3348152f35b34610a0b575f366003190112610a0b576020600554604051908152f35b34610a0b575f366003190112610a0b576020604051735a428ea2f282effbf15baa87f1437f8c2f4fd9958152f35b34610a0b575f366003190112610a0b576020610637611b51565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b576020808501948460051b010111610a0b57565b602435906001600160a01b0382168203610a0b57565b600435906001600160a01b0382168203610a0b57565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b5760208381860195010111610a0b57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9190820180921161130357565b60045462093a8081018091116113035790565b600454156116c757611b74611b51565b62093a8081018091116113035790565b9190820391821161130357565b91907302aae1a04f9828517b3007f83f6181900cad910c330361140957825f52600260205260405f20549182158015611c87575b611c81575f19830192831161130357825f525f60205260405f209060038201548514801590611c70575b8015611c5f575b611c585715611c445790356004820155600201805465ff00000000001916650100000000001790557f4235fc540c899ae91eade70d636591126a477a30a8dc25ae4489f396de2a51035f80a3565b634e487b7160e01b5f52603260045260245ffd5b5050505050565b5060ff600283015460301c16611bf6565b5060ff600283015460281c16611bef565b50505050565b506001811415611bc5565b6004549081158015611ccf575b6112d2576001810180911161130357613840810290808204613840149015171561130357611ccc91611b44565b90565b50602a811015611c9f565b90601f8019910116810190811067ffffffffffffffff821117611cfc57604052565b634e487b7160e01b5f52604160045260245ffd5b611d18611b64565b62278d0081018091116113035790565b67ffffffffffffffff8111611cfc57601f01601f191660200190565b6064358015158103610a0b5790565b60843580600f0b8103610a0b5790565b604051627eeac760e11b81523060048201525f60248201526020816044816e04444c5dc75cb358380d2e3de08a905afa908115611498575f91611da4575090565b90506020813d602011611dcb575b81611dbf60209383611cda565b81010312610a0b575190565b3d9150611db2565b916040519160208301934685523060408501526060840152608083015260018060a01b031660a082015260a08152611e0c60c082611cda565b5190206040516020810191825260208152611e28604082611cda565b51902090565b611e36611d10565b42116116c757805f525f60205260405f206002810180549060ff8260301c16158015611fed575b8015611fdc575b6116c7576006830154916007840190611e7e825485611b84565b9384156116b85767010000000000000092611e976120f5565b5567ff000000000000001916179055611eb281600a54611b44565b600a55600e546116c7576001600e55604080516001600160a01b0386166020820152808201839052908152611eee905f9061046b606082611cda565b0381836e04444c5dc75cb358380d2e3de08a905af1801561149857611f65575b506002600e54036112d2575f600e5560059190910154604080516001600160a01b03958616815260208101939093529316927f5eab6cc13df174a3d427c8f1bbb105e9f5ac31770edd88092331527d9c8fdd6591a3565b3d805f833e611f748183611cda565b810190602081830312610a0b5780519067ffffffffffffffff8211610a0b570181601f82011215610a0b57805190611fab82611d28565b92611fb96040519485611cda565b82845260208383010111610a0b57815f9260208093018386015e83010152611f0e565b506001600160a01b03851615611e64565b5060058301546001600160a01b031615611e5d565b60085480156120f2575f6008556007541515806120e1575b15612096576007545f198101908111611303575f525f602052600260405f2060068101612048848254611b44565b905501805467ff00000000000000191690556007545f198101919082116113035760207fc783854938299dc57460deb40a0fa35b35f08f154d7b2b0ef262bfaa12527cca91604051908152a2565b6020816120c67f3e0eacaa869e03ca54b3ff68315fe703b02a91c5cff5a032eeb830aa0e8a57b093600954611b84565b6009556120d581600b54611b44565b600b55604051908152a1565b506120ea611d10565b42111561201a565b50565b6120fd611d63565b61211261111361110a600b54600c5490611b84565b116112c35756fea264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","sourceMap":"1599:14748:0:-:0;;;;;;;;;;;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","offset":8500}},"transformations":[],"transformationValues":{}},"runtimeBytecode":{"onchainBytecode":"0x60806040526004361015610011575f80fd5b5f803560e01c80630a09284a14611a7b5780630d9019e114611a4d5780631274c3f314611a305780631462783414611a025780631b2df850146119d95780631ca104a9146119bf5780631d073a7a146119915780631fe543e31461195457806328c13a1c1461193657806330e1198b146118f15780633370eb7d146118535780633471fd3e14611836578063379607f51461180057806339018b8e146117595780633ba86c441461173f578063444897ff1461172257806347e405531461170557806349631c17146116e45780635661b7171461151e578063599a949e146115015780635ed73d59146114e5578063676bab0114610f98578063778062a114610f6957806382fadcc214610f3f578063865e0d4814610ef75780638661024b14610edb5780638b3e047614610ebe5780638c65c81f14610e005780638f82543f14610de257806391dd734614610c275780639655647514610c0957806396b24c0014610bee5780639779ea4614610bd057806398bc402d14610b0e5780639f34fc8014610af0578063a06890311461065d578063a6cf7f101461063f578063a779119614610600578063a7b573ca146105e2578063aaac0462146105a3578063b17acdcd146103f0578063ca6015db146103d4578063dc88d0cf146102c3578063e74e607b146102a6578063f11e547d1461025d578063f1e05eb71461023f5763f21f537d1461021f575f80fd5b3461023c578060031936011261023c576020600454604051908152f35b80fd5b503461023c578060031936011261023c576020600d54604051908152f35b503461023c57604036600319011261023c5760209060ff906040906001600160a01b03610288611adc565b16815260038452818120602435825284522054166040519015158152f35b503461023c578060031936011261023c5760206040516103e88152f35b503461023c5760c036600319011261023c576102dd611adc565b506024358015150361023c576064356001600160a01b0381160361023c576084356fffffffffffffffffffffffffffffffff81160361023c5760a43567ffffffffffffffff81116103d057610336903690600401611af2565b505060c090816040516103498282611cda565b36903760405182810181811067ffffffffffffffff8211176103bc576040908152612ee08252610bb860208301526105dc8282015260608201839052610dac60808301526107d060a08301525191825b600682106103a657505050f35b6020806001928551815201930191019091610399565b634e487b7160e01b83526041600452602483fd5b5080fd5b503461023c578060031936011261023c576020604051602a8152f35b503461023c57602036600319011261023c576004358015801561058c575b6104ea5761041a6120f5565b61042681600c54611b44565b600c55600e5461057d576001600e5561048d82604051735a428ea2f282effbf15baa87f1437f8c2f4fd99560208201528360408201526040815261046b606082611cda565b604051809381926348c8949160e01b8352602060048401526024830190611b20565b0381836e04444c5dc75cb358380d2e3de08a905af18015610572576104f9575b506002600e54036104ea5760207f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f9183600e55604051908152a180f35b63b4fa3fb360e01b8252600482fd5b823d8082843e6105098184611cda565b8201916020818403126103d05780519067ffffffffffffffff821161056e570182601f820112156103d057805161053f81611d28565b9361054d6040519586611cda565b8185526020828401011161056e578060208093018386015e830101526104ad565b8280fd5b6040513d85823e3d90fd5b634a44555360e11b8252600482fd5b5061059c600b54600c5490611b84565b811161040e565b503461023c578060031936011261023c576105bc611b64565b4211156105d357602a6006556105d0612002565b80f35b634a44555360e11b8152600490fd5b503461023c578060031936011261023c576020600b54604051908152f35b503461023c57606036600319011261023c57604435906001600160a01b038216820361023c57602061063783602435600435611dd3565b604051908152f35b503461023c578060031936011261023c576020600c54604051908152f35b50608036600319011261023c5760043560243560443563ffffffff8116809103610aec57606435738aca8890d34086d7a30b9c06fae25e0c3cda4cfa3303610ade576006548414801590610acd575b8015610abd575b610aae5780158015610aa2575b610a935783855284602052604085209060028201805460ff8160201c16610a705785845564ffffffffff1916841764010000000017815560018084018390558601808711610a7f578060065584155f146107a7575034610798579160a093917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e359593600160301b66ff000000000000198254161790555b602a6006541461078b575b60066003830154920154926040519485526020850152604084015260608301526080820152a280f35b610793612002565b610762565b63b4fa3fb360e01b8752600487fd5b90506107b16120f5565b8060075560085460068401558660085560038301908154610a70576040516313c34b7f60e01b8152620186a0600482015260016024820152916020836044817302aae1a04f9828517b3007f83f6181900cad910c5afa928315610a65578993610a31575b50823410610a22579061088291602060405163125fa26760e31b828201526001602482015260248152610849604482611cda565b60405180958192634e7e02c760e11b8352620186a060048401526003602484015260016044840152608060648401526084830190611b20565b0381877302aae1a04f9828517b3007f83f6181900cad910c5af1928315610a17578a936109df575b50821580156109ca575b6109bb5790828a94939255888452600160205242604085205581845260026020526040842055877fe09cad433de20c7c5706a5b423836068ff0ebf2ce5e2466fd10dd811aa85f4746020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152a380341161094f575b5050917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e35939160a093610757565b818061095c819334611b84565b738aca8890d34086d7a30b9c06fae25e0c3cda4cfa5af13d156109b6573d61098381611d28565b906109916040519283611cda565b81528760203d92013e5b156109a757855f610921565b63b4fa3fb360e01b8652600486fd5b61099b565b63b4fa3fb360e01b8a5260048afd5b50828a52600260205260408a205415156108b4565b9092506020813d602011610a0f575b816109fb60209383611cda565b81010312610a0b5751915f6108aa565b5f80fd5b3d91506109ee565b6040513d8c823e3d90fd5b63b4fa3fb360e01b8952600489fd5b9092506020813d602011610a5d575b81610a4d60209383611cda565b81010312610a0b5751915f610815565b3d9150610a40565b6040513d8b823e3d90fd5b630bdb902160e41b8852600488fd5b634e487b7160e01b88526011600452602488fd5b63b4fa3fb360e01b8552600485fd5b508215821514156106c0565b634a44555360e11b8552600485fd5b50610ac6611b64565b42116106b3565b50610ad784611c92565b42106106ac565b6282b42960e81b8552600485fd5b8380fd5b503461023c578060031936011261023c57602060405162278d008152f35b503461023c57602036600319011261023c57600435610b2b611d10565b42111561057d5780825281602052604082206006810154906007810191610b53835482611b84565b928315610bc15755600201805466ff0000000000001916600160301b1790556009547f8b15a0b729ab84887af301417db9dd9744f4247286bbe82ff3bf3fcb6d785e0991602091610ba5908290611b84565b600955610bb481600b54611b44565b600b55604051908152a280f35b630bdb902160e41b8652600486fd5b503461023c578060031936011261023c576020604051620186a08152f35b503461023c578060031936011261023c576020610637611d63565b503461023c578060031936011261023c57602060405162093a808152f35b503461023c57602036600319011261023c5760043567ffffffffffffffff81116103d057610c59903690600401611af2565b6e04444c5dc75cb358380d2e3de08a903314801590610dd5575b8015610dca575b610dbc5781604091810103126103d05780356001600160a01b038116919082900361056e57602001356002600e556e04444c5dc75cb358380d2e3de08a903b1561056e5782604051637a94c56560e11b81523060048201528160248201528260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610da7575b50506e04444c5dc75cb358380d2e3de08a903b1561056e5760405191630b0d9c0960e01b8352836004840152602483015260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610d87575b610d838260405190610d6d602083611cda565b8152604051918291602083526020830190611b20565b0390f35b610d92828092611cda565b61023c575f610d5a565b6040513d84823e3d90fd5b81610db191611cda565b61056e57825f610d01565b6282b42960e81b8352600483fd5b506040811415610c7a565b506001600e541415610c73565b503461023c578060031936011261023c576020600854604051908152f35b503461023c57602036600319011261023c57604061018091600435815280602052208054906001810154906002810154600382015460048301549060ff60018060a01b03600586015416936007600687015496015496604051988952602089015263ffffffff81166040890152818160201c1615156060890152818160281c1615156080890152818160301c16151560a089015260381c16151560c087015260e0860152610100850152610120840152610140830152610160820152f35b503461023c578060031936011261023c5760206040516138408152f35b503461023c578060031936011261023c57602060405160018152f35b503461023c578060031936011261023c5760c060045460065460085460075460095491600a5493604051958652602086015260408501526060840152608083015260a0820152f35b503461023c57602036600319011261023c5760406020916004358152600183522054604051908152f35b503461023c578060031936011261023c5760206040517302aae1a04f9828517b3007f83f6181900cad910c8152f35b5034610a0b5736600319016101808112610a0b5761016013610a0b576101643567ffffffffffffffff8111610a0b57610fd5903690600401611af2565b9060405163040dda0f60e01b815230600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f916114a3575b506001600160a01b03163314801590611417575b611409576024356001600160a01b03811690819003610a0b573314918215926113e5575b821561139e575b50508015611392575b6112d257611068611d44565b8061137f575b801561135c575b6112d257611081611d44565b1561134b5761108e611d53565b600f0b600160ff1b8114611303576110ab9060c435905f03611b44565b905b600454801515908161133d575b508061132a575b15611324576103e860c435045b60e43592838211908115611317575b81156112e1575b506112d2576110f1611d63565b6111218461111c61111361110a600b54600c5490611b84565b60095490611b44565b600a5490611b84565b611b44565b116112c357335f52600360205260405f209061116261115a82600435968795865f5260205260405f20600160ff19825416179055611b84565b600b54611b44565b600b5561117181600954611b44565b60095561118081600854611b44565b60085580611291575b5050602a60065414611284575b6111a5600b54600c5490611b84565b90662386f26fc1000082101580611278575b6111ce575b60405163676bab0160e01b8152602090f35b303b15610a0b5760405163b17acdcd60e01b8152600481018390525f816024818330620249f0f19081611263575b5061125b57610e1042019081421161124757507fff7e1fe0c585e56c3169651fd1510e02bd4c92bfde2886b1d4bbb64a6795071b91602091600d55604051908152a25b5f80806111bc565b634e487b7160e01b81526011600452602490fd5b50505061123f565b6112709192505f90611cda565b5f905f6111fc565b50600d544210156111b7565b61128c612002565b611196565b60207faf87dee8e5fc8fe28a934a5511071c36c94b4fe63a8c4fc1c5e737e8ebef435a91604051908152a2815f611189565b6340db7f8760e01b5f5260045ffd5b63b4fa3fb360e01b5f5260045ffd5b6107d08082029250811591830414171561130357620f4240900483105f6110e4565b634e487b7160e01b5f52601160045260245ffd5b90508360c43510906110dd565b5f6110ce565b50611333611b51565b61012435106110c1565b90506101243510155f6110ba565b611353611d53565b600f0b906110ad565b50611365611d44565b15801561107557505f611376611d53565b600f0b12611075565b505f611389611d53565b600f0b1361106e565b5042610124351161105c565b9091506113aa81611d28565b906113b86040519283611cda565b80825260208201923682820111610a0b57815f926020928637830101525190206101443514155f80611053565b9150335f52600360205260405f206004355f5260205260ff60405f2054169161104c565b6282b42960e81b5f5260045ffd5b5060405163218d105760e11b815233600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f9161145d575b5015611028565b90506020813d602011611490575b8161147860209383611cda565b81010312610a0b57518015158103610a0b575f611456565b3d915061146b565b6040513d5f823e3d90fd5b90506020813d6020116114dd575b816114be60209383611cda565b81010312610a0b57516001600160a01b0381168103610a0b575f611014565b3d91506114b1565b34610a0b575f366003190112610a0b576020604051610e108152f35b34610a0b575f366003190112610a0b576020600754604051908152f35b34610a0b576060366003190112610a0b5760043561153a611ac6565b60443567ffffffffffffffff8111610a0b5761155a903690600401611a95565b9190611564611d10565b42116116c757835f525f60205260405f206002810180549360ff8560281c161580156116d6575b6116c75760ff8560301c166116b8576001600160a01b03811680156112d257600484015463ffffffff871680156116a4576115c9910692838a611dd3565b955f965b8888101561163b576001908860051b8801358082105f14611613576040519060208201928352604082015260408152611607606082611cda565b5190205b9701966115cd565b906040519060208201928352604082015260408152611633606082611cda565b51902061160b565b8996508554036112d2577f782732c32ed29ecd5b56192acdf24a69cdc255996ccb806866caf1d05eca970294604094600160301b60059366ff000000000000191617905501816bffffffffffffffffffffffff60a01b82541617905582519182526020820152a2005b634e487b7160e01b5f52601260045260245ffd5b630bdb902160e41b5f5260045ffd5b634a44555360e11b5f5260045ffd5b5063ffffffff85161561158b565b34610a0b575f366003190112610a0b576020604051662386f26fc100008152f35b34610a0b575f366003190112610a0b576020600654604051908152f35b34610a0b575f366003190112610a0b576020600a54604051908152f35b34610a0b575f366003190112610a0b576020610637611d10565b34610a0b576040366003190112610a0b57602435600435738aca8890d34086d7a30b9c06fae25e0c3cda4cf9193301611409576004546116b857801580156117f6575b80156117e1575b6112d257816040917fda99f424f4b343b171a6bab0571655e865e7366818c5c87fd9118dbc731a98a9936004558060055582519182526020820152a1005b5062093a8042018042116113035782116117a3565b504282111561179c565b34610a0b576020366003190112610a0b57611834600435805f525f60205260018060a01b03600560405f2001541690611e2e565b005b34610a0b575f366003190112610a0b576020600954604051908152f35b34610a0b576020366003190112610a0b5760405163e1cab74560e01b8152620186a060048201526001602482015260043560448201526020816064817302aae1a04f9828517b3007f83f6181900cad910c5afa8015611498575f906118be575b602090604051908152f35b506020813d6020116118e9575b816118d860209383611cda565b81010312610a0b57602090516118b3565b3d91506118cb565b34610a0b576040366003190112610a0b5760043561190d611ac6565b5f828152602081905260409020600501546001600160a01b031633036114095761183491611e2e565b34610a0b576020366003190112610a0b576020610637600435611c92565b34610a0b576040366003190112610a0b5760243567ffffffffffffffff8111610a0b57611988611834913690600401611a95565b90600435611b91565b34610a0b575f366003190112610a0b576020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152f35b34610a0b575f366003190112610a0b576020610637611b64565b34610a0b575f366003190112610a0b5760206040516e04444c5dc75cb358380d2e3de08a908152f35b34610a0b575f366003190112610a0b57602060405173180eae784dee739fbab432b06f78bf9a98aae3348152f35b34610a0b575f366003190112610a0b576020600554604051908152f35b34610a0b575f366003190112610a0b576020604051735a428ea2f282effbf15baa87f1437f8c2f4fd9958152f35b34610a0b575f366003190112610a0b576020610637611b51565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b576020808501948460051b010111610a0b57565b602435906001600160a01b0382168203610a0b57565b600435906001600160a01b0382168203610a0b57565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b5760208381860195010111610a0b57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9190820180921161130357565b60045462093a8081018091116113035790565b600454156116c757611b74611b51565b62093a8081018091116113035790565b9190820391821161130357565b91907302aae1a04f9828517b3007f83f6181900cad910c330361140957825f52600260205260405f20549182158015611c87575b611c81575f19830192831161130357825f525f60205260405f209060038201548514801590611c70575b8015611c5f575b611c585715611c445790356004820155600201805465ff00000000001916650100000000001790557f4235fc540c899ae91eade70d636591126a477a30a8dc25ae4489f396de2a51035f80a3565b634e487b7160e01b5f52603260045260245ffd5b5050505050565b5060ff600283015460301c16611bf6565b5060ff600283015460281c16611bef565b50505050565b506001811415611bc5565b6004549081158015611ccf575b6112d2576001810180911161130357613840810290808204613840149015171561130357611ccc91611b44565b90565b50602a811015611c9f565b90601f8019910116810190811067ffffffffffffffff821117611cfc57604052565b634e487b7160e01b5f52604160045260245ffd5b611d18611b64565b62278d0081018091116113035790565b67ffffffffffffffff8111611cfc57601f01601f191660200190565b6064358015158103610a0b5790565b60843580600f0b8103610a0b5790565b604051627eeac760e11b81523060048201525f60248201526020816044816e04444c5dc75cb358380d2e3de08a905afa908115611498575f91611da4575090565b90506020813d602011611dcb575b81611dbf60209383611cda565b81010312610a0b575190565b3d9150611db2565b916040519160208301934685523060408501526060840152608083015260018060a01b031660a082015260a08152611e0c60c082611cda565b5190206040516020810191825260208152611e28604082611cda565b51902090565b611e36611d10565b42116116c757805f525f60205260405f206002810180549060ff8260301c16158015611fed575b8015611fdc575b6116c7576006830154916007840190611e7e825485611b84565b9384156116b85767010000000000000092611e976120f5565b5567ff000000000000001916179055611eb281600a54611b44565b600a55600e546116c7576001600e55604080516001600160a01b0386166020820152808201839052908152611eee905f9061046b606082611cda565b0381836e04444c5dc75cb358380d2e3de08a905af1801561149857611f65575b506002600e54036112d2575f600e5560059190910154604080516001600160a01b03958616815260208101939093529316927f5eab6cc13df174a3d427c8f1bbb105e9f5ac31770edd88092331527d9c8fdd6591a3565b3d805f833e611f748183611cda565b810190602081830312610a0b5780519067ffffffffffffffff8211610a0b570181601f82011215610a0b57805190611fab82611d28565b92611fb96040519485611cda565b82845260208383010111610a0b57815f9260208093018386015e83010152611f0e565b506001600160a01b03851615611e64565b5060058301546001600160a01b031615611e5d565b60085480156120f2575f6008556007541515806120e1575b15612096576007545f198101908111611303575f525f602052600260405f2060068101612048848254611b44565b905501805467ff00000000000000191690556007545f198101919082116113035760207fc783854938299dc57460deb40a0fa35b35f08f154d7b2b0ef262bfaa12527cca91604051908152a2565b6020816120c67f3e0eacaa869e03ca54b3ff68315fe703b02a91c5cff5a032eeb830aa0e8a57b093600954611b84565b6009556120d581600b54611b44565b600b55604051908152a1565b506120ea611d10565b42111561201a565b50565b6120fd611d63565b61211261111361110a600b54600c5490611b84565b116112c35756fea264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","recompiledBytecode":"0x60806040526004361015610011575f80fd5b5f803560e01c80630a09284a14611a7b5780630d9019e114611a4d5780631274c3f314611a305780631462783414611a025780631b2df850146119d95780631ca104a9146119bf5780631d073a7a146119915780631fe543e31461195457806328c13a1c1461193657806330e1198b146118f15780633370eb7d146118535780633471fd3e14611836578063379607f51461180057806339018b8e146117595780633ba86c441461173f578063444897ff1461172257806347e405531461170557806349631c17146116e45780635661b7171461151e578063599a949e146115015780635ed73d59146114e5578063676bab0114610f98578063778062a114610f6957806382fadcc214610f3f578063865e0d4814610ef75780638661024b14610edb5780638b3e047614610ebe5780638c65c81f14610e005780638f82543f14610de257806391dd734614610c275780639655647514610c0957806396b24c0014610bee5780639779ea4614610bd057806398bc402d14610b0e5780639f34fc8014610af0578063a06890311461065d578063a6cf7f101461063f578063a779119614610600578063a7b573ca146105e2578063aaac0462146105a3578063b17acdcd146103f0578063ca6015db146103d4578063dc88d0cf146102c3578063e74e607b146102a6578063f11e547d1461025d578063f1e05eb71461023f5763f21f537d1461021f575f80fd5b3461023c578060031936011261023c576020600454604051908152f35b80fd5b503461023c578060031936011261023c576020600d54604051908152f35b503461023c57604036600319011261023c5760209060ff906040906001600160a01b03610288611adc565b16815260038452818120602435825284522054166040519015158152f35b503461023c578060031936011261023c5760206040516103e88152f35b503461023c5760c036600319011261023c576102dd611adc565b506024358015150361023c576064356001600160a01b0381160361023c576084356fffffffffffffffffffffffffffffffff81160361023c5760a43567ffffffffffffffff81116103d057610336903690600401611af2565b505060c090816040516103498282611cda565b36903760405182810181811067ffffffffffffffff8211176103bc576040908152612ee08252610bb860208301526105dc8282015260608201839052610dac60808301526107d060a08301525191825b600682106103a657505050f35b6020806001928551815201930191019091610399565b634e487b7160e01b83526041600452602483fd5b5080fd5b503461023c578060031936011261023c576020604051602a8152f35b503461023c57602036600319011261023c576004358015801561058c575b6104ea5761041a6120f5565b61042681600c54611b44565b600c55600e5461057d576001600e5561048d82604051735a428ea2f282effbf15baa87f1437f8c2f4fd99560208201528360408201526040815261046b606082611cda565b604051809381926348c8949160e01b8352602060048401526024830190611b20565b0381836e04444c5dc75cb358380d2e3de08a905af18015610572576104f9575b506002600e54036104ea5760207f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f9183600e55604051908152a180f35b63b4fa3fb360e01b8252600482fd5b823d8082843e6105098184611cda565b8201916020818403126103d05780519067ffffffffffffffff821161056e570182601f820112156103d057805161053f81611d28565b9361054d6040519586611cda565b8185526020828401011161056e578060208093018386015e830101526104ad565b8280fd5b6040513d85823e3d90fd5b634a44555360e11b8252600482fd5b5061059c600b54600c5490611b84565b811161040e565b503461023c578060031936011261023c576105bc611b64565b4211156105d357602a6006556105d0612002565b80f35b634a44555360e11b8152600490fd5b503461023c578060031936011261023c576020600b54604051908152f35b503461023c57606036600319011261023c57604435906001600160a01b038216820361023c57602061063783602435600435611dd3565b604051908152f35b503461023c578060031936011261023c576020600c54604051908152f35b50608036600319011261023c5760043560243560443563ffffffff8116809103610aec57606435738aca8890d34086d7a30b9c06fae25e0c3cda4cfa3303610ade576006548414801590610acd575b8015610abd575b610aae5780158015610aa2575b610a935783855284602052604085209060028201805460ff8160201c16610a705785845564ffffffffff1916841764010000000017815560018084018390558601808711610a7f578060065584155f146107a7575034610798579160a093917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e359593600160301b66ff000000000000198254161790555b602a6006541461078b575b60066003830154920154926040519485526020850152604084015260608301526080820152a280f35b610793612002565b610762565b63b4fa3fb360e01b8752600487fd5b90506107b16120f5565b8060075560085460068401558660085560038301908154610a70576040516313c34b7f60e01b8152620186a0600482015260016024820152916020836044817302aae1a04f9828517b3007f83f6181900cad910c5afa928315610a65578993610a31575b50823410610a22579061088291602060405163125fa26760e31b828201526001602482015260248152610849604482611cda565b60405180958192634e7e02c760e11b8352620186a060048401526003602484015260016044840152608060648401526084830190611b20565b0381877302aae1a04f9828517b3007f83f6181900cad910c5af1928315610a17578a936109df575b50821580156109ca575b6109bb5790828a94939255888452600160205242604085205581845260026020526040842055877fe09cad433de20c7c5706a5b423836068ff0ebf2ce5e2466fd10dd811aa85f4746020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152a380341161094f575b5050917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e35939160a093610757565b818061095c819334611b84565b738aca8890d34086d7a30b9c06fae25e0c3cda4cfa5af13d156109b6573d61098381611d28565b906109916040519283611cda565b81528760203d92013e5b156109a757855f610921565b63b4fa3fb360e01b8652600486fd5b61099b565b63b4fa3fb360e01b8a5260048afd5b50828a52600260205260408a205415156108b4565b9092506020813d602011610a0f575b816109fb60209383611cda565b81010312610a0b5751915f6108aa565b5f80fd5b3d91506109ee565b6040513d8c823e3d90fd5b63b4fa3fb360e01b8952600489fd5b9092506020813d602011610a5d575b81610a4d60209383611cda565b81010312610a0b5751915f610815565b3d9150610a40565b6040513d8b823e3d90fd5b630bdb902160e41b8852600488fd5b634e487b7160e01b88526011600452602488fd5b63b4fa3fb360e01b8552600485fd5b508215821514156106c0565b634a44555360e11b8552600485fd5b50610ac6611b64565b42116106b3565b50610ad784611c92565b42106106ac565b6282b42960e81b8552600485fd5b8380fd5b503461023c578060031936011261023c57602060405162278d008152f35b503461023c57602036600319011261023c57600435610b2b611d10565b42111561057d5780825281602052604082206006810154906007810191610b53835482611b84565b928315610bc15755600201805466ff0000000000001916600160301b1790556009547f8b15a0b729ab84887af301417db9dd9744f4247286bbe82ff3bf3fcb6d785e0991602091610ba5908290611b84565b600955610bb481600b54611b44565b600b55604051908152a280f35b630bdb902160e41b8652600486fd5b503461023c578060031936011261023c576020604051620186a08152f35b503461023c578060031936011261023c576020610637611d63565b503461023c578060031936011261023c57602060405162093a808152f35b503461023c57602036600319011261023c5760043567ffffffffffffffff81116103d057610c59903690600401611af2565b6e04444c5dc75cb358380d2e3de08a903314801590610dd5575b8015610dca575b610dbc5781604091810103126103d05780356001600160a01b038116919082900361056e57602001356002600e556e04444c5dc75cb358380d2e3de08a903b1561056e5782604051637a94c56560e11b81523060048201528160248201528260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610da7575b50506e04444c5dc75cb358380d2e3de08a903b1561056e5760405191630b0d9c0960e01b8352836004840152602483015260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610d87575b610d838260405190610d6d602083611cda565b8152604051918291602083526020830190611b20565b0390f35b610d92828092611cda565b61023c575f610d5a565b6040513d84823e3d90fd5b81610db191611cda565b61056e57825f610d01565b6282b42960e81b8352600483fd5b506040811415610c7a565b506001600e541415610c73565b503461023c578060031936011261023c576020600854604051908152f35b503461023c57602036600319011261023c57604061018091600435815280602052208054906001810154906002810154600382015460048301549060ff60018060a01b03600586015416936007600687015496015496604051988952602089015263ffffffff81166040890152818160201c1615156060890152818160281c1615156080890152818160301c16151560a089015260381c16151560c087015260e0860152610100850152610120840152610140830152610160820152f35b503461023c578060031936011261023c5760206040516138408152f35b503461023c578060031936011261023c57602060405160018152f35b503461023c578060031936011261023c5760c060045460065460085460075460095491600a5493604051958652602086015260408501526060840152608083015260a0820152f35b503461023c57602036600319011261023c5760406020916004358152600183522054604051908152f35b503461023c578060031936011261023c5760206040517302aae1a04f9828517b3007f83f6181900cad910c8152f35b5034610a0b5736600319016101808112610a0b5761016013610a0b576101643567ffffffffffffffff8111610a0b57610fd5903690600401611af2565b9060405163040dda0f60e01b815230600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f916114a3575b506001600160a01b03163314801590611417575b611409576024356001600160a01b03811690819003610a0b573314918215926113e5575b821561139e575b50508015611392575b6112d257611068611d44565b8061137f575b801561135c575b6112d257611081611d44565b1561134b5761108e611d53565b600f0b600160ff1b8114611303576110ab9060c435905f03611b44565b905b600454801515908161133d575b508061132a575b15611324576103e860c435045b60e43592838211908115611317575b81156112e1575b506112d2576110f1611d63565b6111218461111c61111361110a600b54600c5490611b84565b60095490611b44565b600a5490611b84565b611b44565b116112c357335f52600360205260405f209061116261115a82600435968795865f5260205260405f20600160ff19825416179055611b84565b600b54611b44565b600b5561117181600954611b44565b60095561118081600854611b44565b60085580611291575b5050602a60065414611284575b6111a5600b54600c5490611b84565b90662386f26fc1000082101580611278575b6111ce575b60405163676bab0160e01b8152602090f35b303b15610a0b5760405163b17acdcd60e01b8152600481018390525f816024818330620249f0f19081611263575b5061125b57610e1042019081421161124757507fff7e1fe0c585e56c3169651fd1510e02bd4c92bfde2886b1d4bbb64a6795071b91602091600d55604051908152a25b5f80806111bc565b634e487b7160e01b81526011600452602490fd5b50505061123f565b6112709192505f90611cda565b5f905f6111fc565b50600d544210156111b7565b61128c612002565b611196565b60207faf87dee8e5fc8fe28a934a5511071c36c94b4fe63a8c4fc1c5e737e8ebef435a91604051908152a2815f611189565b6340db7f8760e01b5f5260045ffd5b63b4fa3fb360e01b5f5260045ffd5b6107d08082029250811591830414171561130357620f4240900483105f6110e4565b634e487b7160e01b5f52601160045260245ffd5b90508360c43510906110dd565b5f6110ce565b50611333611b51565b61012435106110c1565b90506101243510155f6110ba565b611353611d53565b600f0b906110ad565b50611365611d44565b15801561107557505f611376611d53565b600f0b12611075565b505f611389611d53565b600f0b1361106e565b5042610124351161105c565b9091506113aa81611d28565b906113b86040519283611cda565b80825260208201923682820111610a0b57815f926020928637830101525190206101443514155f80611053565b9150335f52600360205260405f206004355f5260205260ff60405f2054169161104c565b6282b42960e81b5f5260045ffd5b5060405163218d105760e11b815233600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f9161145d575b5015611028565b90506020813d602011611490575b8161147860209383611cda565b81010312610a0b57518015158103610a0b575f611456565b3d915061146b565b6040513d5f823e3d90fd5b90506020813d6020116114dd575b816114be60209383611cda565b81010312610a0b57516001600160a01b0381168103610a0b575f611014565b3d91506114b1565b34610a0b575f366003190112610a0b576020604051610e108152f35b34610a0b575f366003190112610a0b576020600754604051908152f35b34610a0b576060366003190112610a0b5760043561153a611ac6565b60443567ffffffffffffffff8111610a0b5761155a903690600401611a95565b9190611564611d10565b42116116c757835f525f60205260405f206002810180549360ff8560281c161580156116d6575b6116c75760ff8560301c166116b8576001600160a01b03811680156112d257600484015463ffffffff871680156116a4576115c9910692838a611dd3565b955f965b8888101561163b576001908860051b8801358082105f14611613576040519060208201928352604082015260408152611607606082611cda565b5190205b9701966115cd565b906040519060208201928352604082015260408152611633606082611cda565b51902061160b565b8996508554036112d2577f782732c32ed29ecd5b56192acdf24a69cdc255996ccb806866caf1d05eca970294604094600160301b60059366ff000000000000191617905501816bffffffffffffffffffffffff60a01b82541617905582519182526020820152a2005b634e487b7160e01b5f52601260045260245ffd5b630bdb902160e41b5f5260045ffd5b634a44555360e11b5f5260045ffd5b5063ffffffff85161561158b565b34610a0b575f366003190112610a0b576020604051662386f26fc100008152f35b34610a0b575f366003190112610a0b576020600654604051908152f35b34610a0b575f366003190112610a0b576020600a54604051908152f35b34610a0b575f366003190112610a0b576020610637611d10565b34610a0b576040366003190112610a0b57602435600435738aca8890d34086d7a30b9c06fae25e0c3cda4cf9193301611409576004546116b857801580156117f6575b80156117e1575b6112d257816040917fda99f424f4b343b171a6bab0571655e865e7366818c5c87fd9118dbc731a98a9936004558060055582519182526020820152a1005b5062093a8042018042116113035782116117a3565b504282111561179c565b34610a0b576020366003190112610a0b57611834600435805f525f60205260018060a01b03600560405f2001541690611e2e565b005b34610a0b575f366003190112610a0b576020600954604051908152f35b34610a0b576020366003190112610a0b5760405163e1cab74560e01b8152620186a060048201526001602482015260043560448201526020816064817302aae1a04f9828517b3007f83f6181900cad910c5afa8015611498575f906118be575b602090604051908152f35b506020813d6020116118e9575b816118d860209383611cda565b81010312610a0b57602090516118b3565b3d91506118cb565b34610a0b576040366003190112610a0b5760043561190d611ac6565b5f828152602081905260409020600501546001600160a01b031633036114095761183491611e2e565b34610a0b576020366003190112610a0b576020610637600435611c92565b34610a0b576040366003190112610a0b5760243567ffffffffffffffff8111610a0b57611988611834913690600401611a95565b90600435611b91565b34610a0b575f366003190112610a0b576020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152f35b34610a0b575f366003190112610a0b576020610637611b64565b34610a0b575f366003190112610a0b5760206040516e04444c5dc75cb358380d2e3de08a908152f35b34610a0b575f366003190112610a0b57602060405173180eae784dee739fbab432b06f78bf9a98aae3348152f35b34610a0b575f366003190112610a0b576020600554604051908152f35b34610a0b575f366003190112610a0b576020604051735a428ea2f282effbf15baa87f1437f8c2f4fd9958152f35b34610a0b575f366003190112610a0b576020610637611b51565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b576020808501948460051b010111610a0b57565b602435906001600160a01b0382168203610a0b57565b600435906001600160a01b0382168203610a0b57565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b5760208381860195010111610a0b57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9190820180921161130357565b60045462093a8081018091116113035790565b600454156116c757611b74611b51565b62093a8081018091116113035790565b9190820391821161130357565b91907302aae1a04f9828517b3007f83f6181900cad910c330361140957825f52600260205260405f20549182158015611c87575b611c81575f19830192831161130357825f525f60205260405f209060038201548514801590611c70575b8015611c5f575b611c585715611c445790356004820155600201805465ff00000000001916650100000000001790557f4235fc540c899ae91eade70d636591126a477a30a8dc25ae4489f396de2a51035f80a3565b634e487b7160e01b5f52603260045260245ffd5b5050505050565b5060ff600283015460301c16611bf6565b5060ff600283015460281c16611bef565b50505050565b506001811415611bc5565b6004549081158015611ccf575b6112d2576001810180911161130357613840810290808204613840149015171561130357611ccc91611b44565b90565b50602a811015611c9f565b90601f8019910116810190811067ffffffffffffffff821117611cfc57604052565b634e487b7160e01b5f52604160045260245ffd5b611d18611b64565b62278d0081018091116113035790565b67ffffffffffffffff8111611cfc57601f01601f191660200190565b6064358015158103610a0b5790565b60843580600f0b8103610a0b5790565b604051627eeac760e11b81523060048201525f60248201526020816044816e04444c5dc75cb358380d2e3de08a905afa908115611498575f91611da4575090565b90506020813d602011611dcb575b81611dbf60209383611cda565b81010312610a0b575190565b3d9150611db2565b916040519160208301934685523060408501526060840152608083015260018060a01b031660a082015260a08152611e0c60c082611cda565b5190206040516020810191825260208152611e28604082611cda565b51902090565b611e36611d10565b42116116c757805f525f60205260405f206002810180549060ff8260301c16158015611fed575b8015611fdc575b6116c7576006830154916007840190611e7e825485611b84565b9384156116b85767010000000000000092611e976120f5565b5567ff000000000000001916179055611eb281600a54611b44565b600a55600e546116c7576001600e55604080516001600160a01b0386166020820152808201839052908152611eee905f9061046b606082611cda565b0381836e04444c5dc75cb358380d2e3de08a905af1801561149857611f65575b506002600e54036112d2575f600e5560059190910154604080516001600160a01b03958616815260208101939093529316927f5eab6cc13df174a3d427c8f1bbb105e9f5ac31770edd88092331527d9c8fdd6591a3565b3d805f833e611f748183611cda565b810190602081830312610a0b5780519067ffffffffffffffff8211610a0b570181601f82011215610a0b57805190611fab82611d28565b92611fb96040519485611cda565b82845260208383010111610a0b57815f9260208093018386015e83010152611f0e565b506001600160a01b03851615611e64565b5060058301546001600160a01b031615611e5d565b60085480156120f2575f6008556007541515806120e1575b15612096576007545f198101908111611303575f525f602052600260405f2060068101612048848254611b44565b905501805467ff00000000000000191690556007545f198101919082116113035760207fc783854938299dc57460deb40a0fa35b35f08f154d7b2b0ef262bfaa12527cca91604051908152a2565b6020816120c67f3e0eacaa869e03ca54b3ff68315fe703b02a91c5cff5a032eeb830aa0e8a57b093600954611b84565b6009556120d581600b54611b44565b600b55604051908152a1565b506120ea611d10565b42111561201a565b50565b6120fd611d63565b61211261111361110a600b54600c5490611b84565b116112c35756fea264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","sourceMap":"1599:14748:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3387:32;1599:14748;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;-1:-1:-1;;;;;1599:14748:0;;:::i;:::-;;;;3009:60;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2107:5;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;12861:6;1599:14748;;12870:5;1599:14748;12852:48;;1599:14748;12877:5;12852:48;;;1599:14748;;12852:48;;1599:14748;;;12887:5;1599:14748;12852:48;;1599:14748;12894:5;1599:14748;12852:48;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1599:14748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2209:2;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;15445:11;;:59;;;;1599:14748;15441:86;;;;:::i;:::-;15562:28;1599:14748;15562:28;1599:14748;15562:28;:::i;:::-;;1599:14748;15733:8;1599:14748;15729:36;;15786:1;15733:8;1599:14748;;;;;1847:42;1599:14748;15826:21;;1599:14748;;;;;;;15826:21;;;;;;:::i;:::-;1599:14748;;;;;;;;;15797:51;;1599:14748;;15797:51;;1599:14748;;;;;;:::i;:::-;15797:51;;;1763:42;15797:51;;;;;;;;1599:14748;;15874:1;15733:8;1599:14748;15862:13;15858:40;;1599:14748;15637:21;1599:14748;;15733:8;1599:14748;;;;;;15637:21;1599:14748;;15858:40;-1:-1:-1;;;15884:14:0;;1599:14748;4981:14;15884;15797:51;;;;;;;;;;;:::i;:::-;;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15797:51;;1599:14748;;;;15797:51;1599:14748;;;;;;;;;15729:36;-1:-1:-1;;;15755:10:0;;1599:14748;9288:10;15755;15445:59;1599:14748;15469:35;:16;1599:14748;15486:18;1599:14748;15469:35;;:::i;:::-;15460:44;;15445:59;;1599:14748;;;;;;;;;;;;;11729:14;;:::i;:::-;11710:15;:33;;11706:56;;2209:2;11772:23;1599:14748;11772:23;;:::i;:::-;1599:14748;;11706:56;-1:-1:-1;;;11752:10:0;;1599:14748;;11752:10;1599:14748;;;;;;;;;;;;;;3311:31;1599:14748;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3348:33;1599:14748;;;;;;;;-1:-1:-1;1599:14748:0;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;;;1929:42;4525:10;:21;4521:48;;6525:9;1599:14748;6520:14;;;;:47;;;1599:14748;6520:83;;;;1599:14748;6516:106;;6636:26;;:66;;;;1599:14748;6632:93;;1599:14748;;;;;;;;;6780:12;;;;1599:14748;;;;;;;6776:38;;1599:14748;;;-1:-1:-1;;1599:14748:0;;;;;;;;6911:18;;;1599:14748;;;;;;;;;;;6525:9;1599:14748;6985:10;;6981:321;1599:14748;;;7015:9;;7011:41;;1599:14748;;;;7373:71;1599:14748;;-1:-1:-1;;;1599:14748:0;;;;;;;;6981:321;2209:2;6525:9;1599:14748;7315:24;7311:47;;6981:321;6525:9;7415:15;;;1599:14748;7432:11;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;7373:71;1599:14748;;7311:47;;;:::i;:::-;;;7011:41;-1:-1:-1;;;7038:14:0;;1599:14748;4981:14;7038;6981:321;;;;;:::i;:::-;1599:14748;7146:32;1599:14748;7206:10;1599:14748;6525:9;7192:11;;1599:14748;;7206:10;1599:14748;7550:15;;;1599:14748;;;7546:46;;1599:14748;;-1:-1:-1;;;7662:48:0;;2471:7;1599:14748;7662:48;;1599:14748;;;;;;;;;;;2015:42;7662:48;;;;;;;;;;;6981:321;7724:9;;;:15;7720:42;;1599:14748;;;;;;;;;7847:66;;;;1599:14748;;7847:66;;1599:14748;;7847:66;;;1599:14748;7847:66;;:::i;:::-;1599:14748;;;;;;;;;7785:129;;2471:7;1599:14748;7785:129;;1599:14748;7550:15;1599:14748;;;;;;;;;;;;;;;;;;;:::i;:::-;7785:129;;;2015:42;7785:129;;;;;;;;;;;6981:321;7928:7;;;:40;;;;6981:321;7924:67;;1599:14748;;;;;;;;;;;;;8048:15;1599:14748;;;;;;;6780:12;1599:14748;;;;;;;8120:33;1599:14748;;;1929:42;1599:14748;;8120:33;7724:9;;8167:15;8163:138;;6981:321;;;;7373:71;6981:321;;1599:14748;6981:321;;;8163:138;7724:9;;8228:13;7724:9;;;8228:13;:::i;:::-;1929:42;8211:35;;1599:14748;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;8264:3;8260:30;;8163:138;;;;8260:30;-1:-1:-1;;;8276:14:0;;1599:14748;4981:14;8276;1599:14748;;;7924:67;-1:-1:-1;;;7977:14:0;;1599:14748;4981:14;7977;7928:40;1599:14748;;;;6780:12;1599:14748;;;;;;7939:29;;7928:40;;7785:129;;;;1599:14748;7785:129;;1599:14748;7785:129;;;;;;1599:14748;7785:129;;;:::i;:::-;;;1599:14748;;;;;7785:129;;;;1599:14748;-1:-1:-1;1599:14748:0;;7785:129;;;-1:-1:-1;7785:129:0;;;1599:14748;;;;;;;;;7720:42;-1:-1:-1;;;7748:14:0;;1599:14748;4981:14;7748;7662:48;;;;1599:14748;7662:48;;1599:14748;7662:48;;;;;;1599:14748;7662:48;;;:::i;:::-;;;1599:14748;;;;;7662:48;;;;;;;-1:-1:-1;7662:48:0;;;1599:14748;;;;;;;;;7546:46;-1:-1:-1;;;7579:13:0;;1599:14748;4853:13;7579;1599:14748;-1:-1:-1;;;1599:14748:0;;;;;;;;6632:93;-1:-1:-1;;;6711:14:0;;1599:14748;4981:14;6711;6636:66;6683:18;;;6667:10;;6666:36;;6636:66;;6516:106;-1:-1:-1;;;6612:10:0;;1599:14748;9288:10;6612;6520:83;6589:14;;;:::i;:::-;6571:15;:32;6520:83;;:47;6556:11;;;;:::i;:::-;6538:15;:29;6520:47;;4521:48;-1:-1:-1;;;4555:14:0;;1599:14748;10249:14;4555;1599:14748;;;;;;;;;;;;;;;;;;;;2305:7;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;11146:15;;:::i;:::-;11127;:34;;11123:57;;1599:14748;;;;;;;;;11248:11;;;1599:14748;11262:10;;;;1599:14748;11248:24;1599:14748;;11248:24;;:::i;:::-;11286:11;;;11282:37;;1599:14748;11363:13;;1599:14748;;-1:-1:-1;;1599:14748:0;-1:-1:-1;;;1599:14748:0;;;11393:22;1599:14748;11466:23;;1599:14748;;11393:22;;1599:14748;;11393:22;:::i;:::-;;1599:14748;11425:26;1599:14748;11425:26;1599:14748;11425:26;:::i;:::-;;1599:14748;;;;;;11466:23;1599:14748;;11282:37;-1:-1:-1;;;11306:13:0;;1599:14748;4853:13;11306;1599:14748;;;;;;;;;;;;;;;;2471:7;1599:14748;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2254:6;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;:::i;:::-;1763:42;16023:10;:21;;;:38;;;1599:14748;16023:59;;;;1599:14748;16019:86;;16145:34;1599:14748;16145:34;;;1599:14748;;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;16200:1;16189:12;1599:14748;1763:42;16211:50;;;;1599:14748;;;;;;16211:50;;16246:4;1599:14748;16211:50;;1599:14748;;;;;;;;;;;16211:50;;;;;1763:42;16211:50;;;;;;;;1599:14748;16271:48;;1763:42;16271:48;;;;1599:14748;;;;;;16271:48;;;1599:14748;16271:48;;1599:14748;;;;;;;;;16271:48;;16211:50;16271:48;;1763:42;16271:48;;;;;;;;1599:14748;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;16271:48;;;;;;:::i;:::-;1599:14748;;16271:48;;;;1599:14748;;;;;;;;;16211:50;;;;;:::i;:::-;1599:14748;;16211:50;;;;16019:86;-1:-1:-1;;;16091:14:0;;1599:14748;10249:14;16091;16023:59;16065:17;1599:14748;16065:17;;;16023:59;;:38;1599:14748;16060:1;16048:8;1599:14748;16048:13;;16023:38;;1599:14748;;;;;;;;;;;;;;3217:25;1599:14748;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;2850:39;1599:14748;2850:39;;1599:14748;2850:39;;;;1599:14748;2850:39;;;1599:14748;;2850:39;;1599:14748;;;;;;;;2850:39;;;1599:14748;;2850:39;;;;;1599:14748;2850:39;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:7;1599:14748;;;;;;;;;;;;;;;;;;;2523:4;1599:14748;;;;;;;;;;;;;;;;;;;6154:9;1599:14748;6165:10;1599:14748;6177:24;1599:14748;6203:12;1599:14748;;6217:9;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2015:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;-1:-1:-1;1599:14748:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;13097:27;;13118:4;1599:14748;13097:27;;1599:14748;;13097:27;;;1681:42;13097:27;;;;;;;1599:14748;13097:27;;;1599:14748;-1:-1:-1;;;;;;1599:14748:0;13083:10;:41;;;;:75;;1599:14748;13079:102;;13097:27;1599:14748;-1:-1:-1;;;;;1599:14748:0;;;;;;;;13083:10;13195:26;;;;:60;;;1599:14748;13195:97;;;;1599:14748;13195:134;;;;;;1599:14748;13191:161;;13367:9;;:::i;:::-;:30;;;1599:14748;13366:69;;;;1599:14748;13362:96;;13484:9;;:::i;:::-;:91;;;13512:13;;:::i;:::-;1599:14748;;-1:-1:-1;;;1599:14748:0;;;;13496:46;1599:14748;13530:12;1599:14748;;;;13496:46;:::i;:::-;13484:91;;1599:14748;;13756:14;;;:46;;;;13484:91;13756:76;;;;13484:91;13756:115;;;2107:5;13835:12;1599:14748;;13756:115;13893:18;1599:14748;13885:26;;;;:63;;;;;13756:115;13885:113;;;;13756:115;13881:140;;;14035:15;;:::i;:::-;14053:81;1599:14748;14053:60;:50;:35;:16;1599:14748;14070:18;1599:14748;14053:35;;:::i;:::-;14091:12;1599:14748;14053:50;;:::i;:::-;14104:9;1599:14748;14053:60;;:::i;:::-;:81;:::i;:::-;-1:-1:-1;14031:133:0;;13083:10;1599:14748;;14174:8;1599:14748;;;;;;14221:46;14241:26;1599:14748;;;;;;;;;;;;;;;;;;;;;;;14241:26;:::i;:::-;14053:16;1599:14748;14221:46;:::i;:::-;14053:16;1599:14748;14277:21;1599:14748;14091:12;1599:14748;14277:21;:::i;:::-;14091:12;1599:14748;14308:19;1599:14748;14308:19;1599:14748;14308:19;:::i;:::-;;1599:14748;14341:10;14337:47;;13756:115;1599:14748;;2209:2;14398:9;1599:14748;14398:24;14394:47;;13756:115;14700:35;14053:16;1599:14748;14070:18;1599:14748;14700:35;;:::i;:::-;14749:28;2362:10;14749:28;;;:68;;;13756:115;14745:295;;13756:115;1599:14748;;-1:-1:-1;;;1599:14748:0;;;;;14745:295;13118:4;14837:38;;;;1599:14748;;-1:-1:-1;;;14837:38:0;;1599:14748;14837:38;;1599:14748;;;-1:-1:-1;1599:14748:0;13097:27;1599:14748;-1:-1:-1;13118:4:0;14858:7;14837:38;;;;;14745:295;-1:-1:-1;14833:197:0;;2420:7;14923:15;1599:14748;14923:15;;;1599:14748;;;;14979:36;1599:14748;;;14903:53;1599:14748;;;;;;14979:36;14833:197;14745:295;;;;;1599:14748;-1:-1:-1;;;1599:14748:0;;;;;13097:27;;1599:14748;14833:197;;;;;;14837:38;;;;;1599:14748;14837:38;;:::i;:::-;1599:14748;14837:38;;;;14749:68;1599:14748;14800:17;1599:14748;14781:15;:36;;14749:68;;14394:47;;;:::i;:::-;;;14337;1599:14748;14358:26;1599:14748;;;;;;14358:26;14337:47;;;;14031:133;14143:21;;;1599:14748;14143:21;1599:14748;;14143:21;13881:140;4981:14;;;1599:14748;14007:14;1599:14748;;14007:14;13885:113;13981:5;1599:14748;;;;-1:-1:-1;1599:14748:0;;;;;;;;;;13989:9;1599:14748;;13952:46;;13885:113;;;1599:14748;;;;;;;;;13097:27;1599:14748;;13885:63;1599:14748;;;13915:12;1599:14748;13915:33;13885:63;;;13756:115;1599:14748;13756:115;;:76;13824:8;;;:::i;:::-;13806:15;1599:14748;13806:26;13756:76;;:46;1599:14748;;13774:15;1599:14748;13774:28;;13756:46;;;13484:91;13560:13;;:::i;:::-;1599:14748;;13484:91;;;13366:69;13404:9;;;:::i;:::-;13403:10;:31;;13366:69;13403:31;13417:13;1599:14748;13417:13;;:::i;:::-;1599:14748;;13417:17;13366:69;;13367:30;13380:13;1599:14748;13380:13;;:::i;:::-;1599:14748;;13380:17;13367:30;;13195:134;13314:15;;13296;1599:14748;13296:33;13195:134;;:97;1599:14748;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13277:15;;13259:14;1599:14748;13259:33;;13195:97;;;;:60;13083:10;;;1599:14748;;13225:8;1599:14748;;;;;;;;;;;;;;;;;13195:60;;;13079:102;10249:14;;;1599:14748;13167:14;1599:14748;;13167:14;13083:75;-1:-1:-1;1599:14748:0;;-1:-1:-1;;;13129:29:0;;13083:10;1599:14748;13129:29;;1599:14748;;;13097:27;1599:14748;1681:42;13129:29;;;;;;;1599:14748;13129:29;;;13083:75;13128:30;;13083:75;;13129:29;;;1599:14748;13129:29;;1599:14748;13129:29;;;;;;1599:14748;13129:29;;;:::i;:::-;;;1599:14748;;;;;;;;;;;;13129:29;;;;;;-1:-1:-1;13129:29:0;;;1599:14748;;;;;;;;;13097:27;;;1599:14748;13097:27;;1599:14748;13097:27;;;;;;1599:14748;13097:27;;;:::i;:::-;;;1599:14748;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;13097:27;;;;;;-1:-1:-1;13097:27:0;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;2420:7;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3172:39;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9264:15;;;;:::i;:::-;9246;:33;9242:56;;1599:14748;;;;;;;;;9354:17;;;1599:14748;;;;;;;;9353:18;1599:14748;;9353:40;;1599:14748;9349:63;;1599:14748;;;;;9422:39;;-1:-1:-1;;;;;1599:14748:0;;9475:17;;9471:44;;1599:14748;9541:16;;1599:14748;;;;;;;;9598:19;1599:14748;;9598:19;;;;:::i;:::-;9632:9;1599:14748;9627:215;9661:3;9643:16;;;;;;1599:14748;9698:8;1599:14748;;;;;;9727:14;;;:104;:14;;;1599:14748;;9754:31;1599:14748;9754:31;;1599:14748;;;;;;;;9754:31;;;1599:14748;9754:31;;:::i;:::-;1599:14748;9744:42;;9727:104;9661:3;1599:14748;9632:9;;;9727:104;1599:14748;;;9799:31;1599:14748;9799:31;;1599:14748;;;;;;;;9799:31;;;1599:14748;9799:31;;:::i;:::-;1599:14748;9789:42;;9727:104;;9643:16;;;;1599:14748;;9855:18;9851:45;;9969:21;1599:14748;;;-1:-1:-1;;;1599:14748:0;;;;;;;;9936:12;1599:14748;;;;;;;;;;;;;;;;;;;9969:21;1599:14748;;;;;;;;;;;;;9422:39;4853:13;;;1599:14748;9448:13;1599:14748;;9448:13;9349:63;9288:10;;;1599:14748;9402:10;1599:14748;;9402:10;9353:40;1599:14748;;;;9375:18;9353:40;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;2362:10;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3142:24;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3281:24;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;-1:-1:-1;;4525:10:0;:21;4521:48;;1599:14748;;4826:40;;4880:24;;:54;;;;1599:14748;4880:92;;;;1599:14748;4876:119;;1599:14748;;;5078:36;1599:14748;;;;5034:29;1599:14748;;;;;;;;;;5078:36;1599:14748;4880:92;4948:15;4966:6;4948:15;1599:14748;4948:15;;1599:14748;;;4938:34;;4880:92;;:54;4919:15;;4908:26;;;4880:54;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;10122:16;1599:14748;;;;;;;;;;;;;10122:16;1599:14748;;;10122:16;1599:14748;;10122:16;;:::i;:::-;1599:14748;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3248:27;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;5892:78;;2471:7;1599:14748;5892:78;;1599:14748;;;;;;;;;;;;;5892:78;;;2015:42;5892:78;;;;;;1599:14748;5892:78;;;1599:14748;;;;;;;;;5892:78;;1599:14748;5892:78;;1599:14748;5892:78;;;;;;1599:14748;5892:78;;;:::i;:::-;;;1599:14748;;;;;;;5892:78;;;;;-1:-1:-1;5892:78:0;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;:::i;:::-;;;;;;;;;;;;10224:16;;1599:14748;-1:-1:-1;;;;;1599:14748:0;10210:10;:30;10206:57;;10283:2;;;:::i;1599:14748::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1929:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1763:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1681:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3105:31;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1847:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1599:14748:0;;;;;;;;-1:-1:-1;;1599:14748:0;;;;:::o;:::-;;;;;;;;;;:::o;5127:99::-;5184:9;1599:14748;;;;;;;;;5127:99;:::o;5425:146::-;5493:9;1599:14748;5493:14;5489:37;;5543:8;;:::i;:::-;2254:6;1599:14748;;;;;;;5425:146;:::o;1599:14748::-;;;;;;;;;;:::o;8465:483::-;;;2015:42;8557:10;:25;8553:52;;1599:14748;-1:-1:-1;1599:14748:0;8628:20;1599:14748;;;-1:-1:-1;1599:14748:0;;8666:7;;;:28;;;;8465:483;8662:41;;-1:-1:-1;;1599:14748:0;;;;;;;;-1:-1:-1;1599:14748:0;-1:-1:-1;1599:14748:0;;;-1:-1:-1;1599:14748:0;8766:15;;;;1599:14748;8760:21;;;;:42;;;8465:483;8760:59;;;;8465:483;8756:72;;1599:14748;;;;;8837:16;;;1599:14748;8628:20;8874:17;1599:14748;;-1:-1:-1;;1599:14748:0;;;;;8913:28;-1:-1:-1;;8913:28:0;8465:483::o;1599:14748::-;;;;-1:-1:-1;1599:14748:0;;;;;-1:-1:-1;1599:14748:0;8756:72;8821:7;;;;;:::o;8760:59::-;8806:13;1599:14748;8628:20;8806:13;;1599:14748;;;;8760:59;;:42;8785:17;1599:14748;8628:20;8785:17;;1599:14748;;;;8760:42;;8662:41;8696:7;;;;:::o;8666:28::-;8677:17;8693:1;8677:17;;;8666:28;;5231:189;5304:9;1599:14748;5304:14;;;:34;;;;5231:189;5300:61;;5395:1;1599:14748;;;;;;;2158:7;1599:14748;;;;;;2158:7;1599:14748;;;;;;;5378:35;;;:::i;:::-;5231:189;:::o;5304:34::-;5322:16;2209:2;5322:16;;;5304:34;;1599:14748;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;1599:14748:0;;;;;-1:-1:-1;1599:14748:0;5704:96;5768:14;;:::i;:::-;2305:7;1599:14748;;;;;;;5704:96;:::o;1599:14748::-;;;;;;;;-1:-1:-1;;1599:14748:0;;;;:::o;:::-;13367:9;1599:14748;;;;;;;;;:::o;:::-;13380:13;1599:14748;;;;;;;;;:::o;15093:115::-;1599:14748;;-1:-1:-1;;;15157:48:0;;15197:4;15157:48;;;1599:14748;-1:-1:-1;1599:14748:0;;;;;;15157:48;1599:14748;1763:42;15157:48;;;;;;;15203:1;15157:48;;;15150:55;15093:115;:::o;15157:48::-;;;1599:14748;15157:48;;1599:14748;15157:48;;;;;;1599:14748;15157:48;;;:::i;:::-;;;1599:14748;;;;;15093:115;:::o;15157:48::-;;;-1:-1:-1;15157:48:0;;8954:198;;1599:14748;;9087:55;;;;9098:13;;1599:14748;;9121:4;1599:14748;;;;;;;;;;;;;;;;;;;;;;;9087:55;;;;;;:::i;:::-;1599:14748;9077:66;;1599:14748;;9087:55;1599:14748;;;;;9087:55;1599:14748;;;;;;:::i;:::-;;9054:91;;8954:198;:::o;10298:553::-;10377:15;;:::i;:::-;10359;:33;10355:56;;1599:14748;-1:-1:-1;1599:14748:0;-1:-1:-1;1599:14748:0;;;-1:-1:-1;1599:14748:0;10467:13;;;1599:14748;;;;;;;;10466:14;1599:14748;;10466:44;;10298:553;10466:64;;;;10298:553;10462:87;;10576:11;;;1599:14748;10590:10;;;;1599:14748;10576:24;1599:14748;;10576:24;;:::i;:::-;10614:11;;;10610:37;;1599:14748;10610:37;;;:::i;:::-;1599:14748;;;;;;;10746:19;1599:14748;10746:19;1599:14748;10746:19;:::i;:::-;;1599:14748;15733:8;1599:14748;15729:36;;15786:1;15733:8;1599:14748;;;;-1:-1:-1;;;;;1599:14748:0;;;15826:21;;1599:14748;;;;;;;15826:21;;;1599:14748;;-1:-1:-1;;15826:21:0;1599:14748;;15826:21;:::i;1599:14748::-;15797:51;;;1763:42;15797:51;;;;;;;;10298:553;1599:14748;10467:13;15733:8;1599:14748;15862:13;15858:40;;-1:-1:-1;15733:8:0;1599:14748;10819:12;;;;;1599:14748;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;;;;10806:38;;;10298:553::o;15797:51::-;;;-1:-1:-1;15797:51:0;;;;;;:::i;:::-;;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1599:14748:0;;;;;;;;;;;;;15797:51;;10466:64;-1:-1:-1;;;;;;1599:14748:0;;10514:16;10466:64;;:44;-1:-1:-1;10484:12:0;;;1599:14748;-1:-1:-1;;;;;1599:14748:0;10484:26;10466:44;;11834:720;11896:10;1599:14748;11920:11;;11916:24;;-1:-1:-1;11896:10:0;1599:14748;11977:24;1599:14748;11977:29;;:67;;;11834:720;11973:575;;;11977:24;1599:14748;-1:-1:-1;;1599:14748:0;;;;;;;-1:-1:-1;1599:14748:0;-1:-1:-1;1599:14748:0;;12165:13;1599:14748;-1:-1:-1;1599:14748:0;12130:11;;;:21;1599:14748;;;12130:21;:::i;:::-;1599:14748;;12165:13;1599:14748;;-1:-1:-1;;1599:14748:0;;;11977:24;1599:14748;-1:-1:-1;;1599:14748:0;;;;;;;;;12205:51;1599:14748;;;;;;12205:51;11834:720::o;11973:575::-;1599:14748;;12429:22;12510:27;1599:14748;12429:22;1599:14748;12429:22;:::i;:::-;;1599:14748;12465:26;1599:14748;12465:26;1599:14748;12465:26;:::i;:::-;;1599:14748;;;;;;12510:27;11834:720::o;11977:67::-;12029:15;;;:::i;:::-;12010;:34;;11977:67;;11916:24;11933:7;:::o;15213:167::-;15265:15;;:::i;:::-;15283:60;:50;:35;:16;1599:14748;15300:18;1599:14748;15283:35;;:::i;:60::-;-1:-1:-1;15261:112:0;;15213:167::o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","offset":8474}},"immutableReferences":{},"transformations":[],"transformationValues":{}},"deployment":{"transactionHash":"0xbefacd2cd03ce53c63815e915ef0dca047826701686b591842340a158da7627a","blockNumber":"26291946","transactionIndex":"163","deployer":"0xAB716305E5A8854c0DD08397087dbDD56eA32073"},"sources":{"src/ClausFreeDrawHook.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nimport {IProgram, ProgramTypes} from \"./IClausTradeProgram.sol\";\n\ninterface IDrawGovernance {\n    function adapterFor(address) external view returns (address);\n    function approvedAdapter(address) external view returns (bool);\n}\ninterface IDrawManager {\n    function balanceOf(address, uint256) external view returns (uint256);\n    function unlock(bytes calldata) external returns (bytes memory);\n    function burn(address, uint256, uint256) external;\n    function take(address, address, uint256) external;\n}\ninterface IDrawVRF {\n    function calculateRequestPriceNative(uint32, uint32) external view returns (uint256);\n    function estimateRequestPriceNative(uint32, uint32, uint256) external view returns (uint256);\n    function requestRandomWordsInNative(uint32, uint16, uint32, bytes calldata) external payable returns (uint256);\n}\n\n/// @notice Free-entry community draws funded by 0.1% of existing collected\n/// swap fees. The total trading fee never increases. Swaps and holdings NEVER\n/// create entries or improve odds.\n/// The collector publishes an ordered free-address list before each VRF request.\n/// Admission relies on that collector; this is not trustless proof of personhood.\n/// Each frozen round has exactly one VRF request. A missing answer is never\n/// re-requested: competing results would let fulfillment ordering bias winners.\n/// Winners pull their prize;\n/// trade receipts never push claims. Prizes still unpaid after the claim window\n/// return to the existing inference recipient, never to an arbitrary caller.\ncontract ClausFreeDrawHook is IProgram {\n    address public constant GOVERNANCE = 0x180eAE784dEe739FBab432B06f78bF9a98Aae334;\n    address public constant MANAGER = 0x000000000004444c5dc75cB358380D2e3dE08A90;\n    address public constant RECIPIENT = 0x5a428Ea2f282EFfBf15BAa87F1437f8C2f4fd995;\n    address public constant SPONSOR = 0x8aCA8890D34086D7a30B9c06fAe25E0C3cda4cFa;\n    address public constant VRF_WRAPPER = 0x02aae1A04f9828517b3007f83f6181900CaD910c;\n    uint256 public constant FEE_SHARE_DIVISOR = 1_000;\n    uint256 public constant ROUND_SECONDS = 4 hours;\n    uint256 public constant ROUND_COUNT = 42;\n    uint256 public constant SEAL_GRACE = 7 days;\n    uint256 public constant CLAIM_WINDOW = 30 days;\n    uint256 public constant COLLECT_THRESHOLD = 0.01 ether;\n    uint256 public constant COLLECT_BACKOFF = 1 hours;\n    uint32 public constant CALLBACK_GAS = 100_000;\n    bool public constant lpRewardsPaused = true;\n\n    struct Round {\n        bytes32 root;\n        bytes32 snapshotHash;\n        uint32 entries;\n        bool closed;\n        bool randomReady;\n        bool settled;\n        bool claimed;\n        uint256 requestId;\n        uint256 randomWord;\n        address winner;\n        uint256 prize;\n        uint256 paid;\n    }\n    mapping(uint256 => Round) public rounds;\n    mapping(uint256 => uint256) public requestedAt;\n    mapping(uint256 => uint256) private _requestRoundPlusOne;\n    mapping(address => mapping(uint256 => bool)) public received;\n    uint256 public startedAt;\n    bytes32 public announcementHash;\n    uint256 public nextRound;\n    uint256 public lastEligibleRoundPlusOne;\n    uint256 public pendingPot;\n    uint256 public prizeAccrued;\n    uint256 public prizePaid;\n    uint256 public recipientAccrued;\n    uint256 public recipientCollected;\n    uint256 public collectRetryAfter;\n    uint256 private _payment;\n\n    error Unauthorized();\n    error InvalidInput();\n    error NotReady();\n    error AlreadyDone();\n    error InsufficientBacking();\n\n    event CampaignStarted(uint256 at, bytes32 announcementHash);\n    event RoundSealed(uint256 indexed round, bytes32 root, uint256 entries, bytes32 snapshotHash, uint256 requestId, uint256 prize);\n    event RandomnessRequested(uint256 indexed round, uint256 indexed requestId, address payer);\n    event RandomnessReceived(uint256 indexed round, uint256 indexed requestId);\n    event Winner(uint256 indexed round, uint256 index, address beneficiary);\n    event PrizePaid(uint256 indexed round, address indexed beneficiary, address to, uint256 amount);\n    event PrizeExpired(uint256 indexed round, uint256 amount);\n    event PotFunded(uint256 indexed receiptId, uint256 amount);\n    event LatePotAssigned(uint256 indexed round, uint256 amount);\n    event NoEntrantsRemainder(uint256 amount);\n    event FeesCollected(uint256 amount);\n    event CollectionDeferred(uint256 indexed receiptId, uint256 amount);\n\n    modifier onlySponsor() { if (msg.sender != SPONSOR) revert Unauthorized(); _; }\n\n    /// @notice The future start avoids ambiguous pre-start receipts in the same\n    /// block. Activation must also honor the separate published advance notice.\n    function start(bytes32 sourceHash, uint256 opensAt) external onlySponsor {\n        if (startedAt != 0) revert AlreadyDone();\n        if (sourceHash == bytes32(0) || opensAt <= block.timestamp || opensAt > block.timestamp + 7 days) revert InvalidInput();\n        startedAt = opensAt;\n        announcementHash = sourceHash;\n        emit CampaignStarted(opensAt, sourceHash);\n    }\n\n    function endsAt() public view returns (uint256) { return startedAt + ROUND_COUNT * ROUND_SECONDS; }\n    function closesAt(uint256 r) public view returns (uint256) {\n        if (startedAt == 0 || r >= ROUND_COUNT) revert InvalidInput();\n        return startedAt + (r + 1) * ROUND_SECONDS;\n    }\n    function sealDeadline() public view returns (uint256) {\n        if (startedAt == 0) revert NotReady();\n        return endsAt() + SEAL_GRACE;\n    }\n    /// @notice After this time unpaid prizes may be returned to RECIPIENT and\n    /// late receipts no longer top up a winner.\n    function claimDeadline() public view returns (uint256) { return sealDeadline() + CLAIM_WINDOW; }\n    function drawFee(uint256 gasPriceWei) external view returns (uint256) {\n        return IDrawVRF(VRF_WRAPPER).estimateRequestPriceNative(CALLBACK_GAS, 1, gasPriceWei);\n    }\n    function drawState() external view returns (uint256 startTime, uint256 next, uint256 pot, uint256 lastEligible, uint256 accrued, uint256 paid) {\n        return (startedAt, nextRound, pendingPot, lastEligibleRoundPlusOne, prizeAccrued, prizePaid);\n    }\n\n    /// @notice Freeze rounds in order. An empty round carries its available pot\n    /// forward. Oracle costs come from the caller, never from collected prizes.\n    function seal(uint256 r, bytes32 root, uint32 count, bytes32 snapshotHash) external payable onlySponsor {\n        if (r != nextRound || block.timestamp < closesAt(r) || block.timestamp > sealDeadline()) revert NotReady();\n        if (snapshotHash == bytes32(0) || (count == 0) != (root == bytes32(0))) revert InvalidInput();\n        Round storage round = rounds[r];\n        if (round.closed) revert AlreadyDone();\n        round.closed = true;\n        round.root = root;\n        round.entries = count;\n        round.snapshotHash = snapshotHash;\n        nextRound = r + 1;\n        if (count == 0) {\n            if (msg.value != 0) revert InvalidInput();\n            round.settled = true;\n        } else {\n            _checkBacking();\n            lastEligibleRoundPlusOne = r + 1;\n            round.prize = pendingPot;\n            pendingPot = 0;\n            _requestRandom(r, round, SPONSOR);\n        }\n        if (nextRound == ROUND_COUNT) _assignFinalPot();\n        emit RoundSealed(r, root, count, snapshotHash, round.requestId, round.prize);\n    }\n\n    function _requestRandom(uint256 r, Round storage round, address payer) private {\n        if (round.requestId != 0) revert AlreadyDone();\n        IDrawVRF vrf = IDrawVRF(VRF_WRAPPER);\n        uint256 fee = vrf.calculateRequestPriceNative(CALLBACK_GAS, 1);\n        if (msg.value < fee) revert InvalidInput();\n        uint256 id = vrf.requestRandomWordsInNative{value:fee}(CALLBACK_GAS, 3, 1, abi.encodeWithSelector(bytes4(keccak256(\"VRF ExtraArgsV1\")), true));\n        if (id == 0 || _requestRoundPlusOne[id] != 0) revert InvalidInput();\n        round.requestId = id;\n        requestedAt[r] = block.timestamp;\n        _requestRoundPlusOne[id] = r + 1;\n        emit RandomnessRequested(r, id, payer);\n        if (msg.value > fee) {\n            (bool ok,) = payer.call{value:msg.value-fee}(\"\");\n            if (!ok) revert InvalidInput();\n        }\n    }\n\n    /// @notice Only the round's original request can supply its result.\n    /// Duplicate callbacks and callbacks after expiry settlement are ignored.\n    function rawFulfillRandomWords(uint256 id, uint256[] calldata words) external {\n        if (msg.sender != VRF_WRAPPER) revert Unauthorized();\n        uint256 rp = _requestRoundPlusOne[id];\n        if (rp == 0 || words.length != 1) return;\n        Round storage round = rounds[rp-1];\n        if (id != round.requestId || round.randomReady || round.settled) return;\n        round.randomWord = words[0];\n        round.randomReady = true;\n        emit RandomnessReceived(rp-1, id);\n    }\n\n    function leaf(uint256 r, uint256 index, address who) public view returns (bytes32) {\n        return keccak256(bytes.concat(keccak256(abi.encode(block.chainid, address(this), r, index, who))));\n    }\n    function settle(uint256 r, address who, bytes32[] calldata proof) external {\n        if (block.timestamp > claimDeadline()) revert NotReady();\n        Round storage round = rounds[r];\n        if (!round.randomReady || round.entries == 0) revert NotReady();\n        if (round.settled) revert AlreadyDone();\n        if (who == address(0)) revert InvalidInput();\n        uint256 index = round.randomWord % round.entries;\n        bytes32 hash = leaf(r, index, who);\n        for (uint256 i; i < proof.length; ++i) {\n            bytes32 sibling = proof[i];\n            hash = hash < sibling ? keccak256(abi.encodePacked(hash, sibling)) : keccak256(abi.encodePacked(sibling, hash));\n        }\n        if (hash != round.root) revert InvalidInput();\n        round.settled = true;\n        round.winner = who;\n        emit Winner(r, index, who);\n    }\n    /// @notice Anyone may pay a settled winner their outstanding prize.\n    function claim(uint256 r) external { _claim(r, rounds[r].winner); }\n    function claimTo(uint256 r, address to) external {\n        if (msg.sender != rounds[r].winner) revert Unauthorized();\n        _claim(r, to);\n    }\n    function _claim(uint256 r, address to) private {\n        if (block.timestamp > claimDeadline()) revert NotReady();\n        Round storage round = rounds[r];\n        if (!round.settled || round.winner == address(0) || to == address(0)) revert NotReady();\n        uint256 amount = round.prize - round.paid;\n        if (amount == 0) revert AlreadyDone();\n        _checkBacking();\n        round.paid = round.prize;\n        round.claimed = true;\n        prizePaid += amount;\n        _pay(to, amount);\n        emit PrizePaid(r, round.winner, to, amount);\n    }\n\n    /// @notice After the claim window, any unpaid prize (unanswered oracle,\n    /// unclaimed or undeliverable) returns to the existing inference recipient.\n    /// Inside the window no winner is ever redirected.\n    function sweepExpired(uint256 r) external {\n        if (block.timestamp <= claimDeadline()) revert NotReady();\n        Round storage round = rounds[r];\n        uint256 amount = round.prize - round.paid;\n        if (amount == 0) revert AlreadyDone();\n        round.paid = round.prize;\n        round.settled = true;\n        prizeAccrued -= amount;\n        recipientAccrued += amount;\n        emit PrizeExpired(r, amount);\n    }\n\n    /// @notice Only used after the grace period if the operator missed rounds.\n    /// Never cancels a random request or redirects any assigned winning claim.\n    function finishSealing() external {\n        if (block.timestamp <= sealDeadline()) revert NotReady();\n        nextRound = ROUND_COUNT;\n        _assignFinalPot();\n    }\n    function _assignFinalPot() private {\n        uint256 amount = pendingPot;\n        if (amount == 0) return;\n        pendingPot = 0;\n        if (lastEligibleRoundPlusOne != 0 && block.timestamp <= claimDeadline()) {\n            Round storage round = rounds[lastEligibleRoundPlusOne-1];\n            round.prize += amount;\n            round.claimed = false;\n            emit LatePotAssigned(lastEligibleRoundPlusOne-1, amount);\n        } else {\n            // No eligible draw, or the claim window has closed: return the\n            // fee share to the pre-existing inference recipient.\n            prizeAccrued -= amount;\n            recipientAccrued += amount;\n            emit NoEntrantsRemainder(amount);\n        }\n    }\n\n    /// @notice The wrapper adds the existing 0.1% protected compute allocation.\n    /// Total trading fees stay at 2.3%, before, during and after the campaign.\n    function quote(address, bool, int256, uint160, uint128, bytes calldata) external pure returns (uint256[6] memory) {\n        return [uint256(12_000), 3_000, 1_500, 0, 3_500, 2_000];\n    }\n\n    function onTrade(ProgramTypes.Trade calldata trade, bytes calldata data) external returns (bytes4) {\n        IDrawGovernance g = IDrawGovernance(GOVERNANCE);\n        if (msg.sender != g.adapterFor(address(this)) || !g.approvedAdapter(msg.sender)) revert Unauthorized();\n        if (trade.module != msg.sender || received[msg.sender][trade.id] || trade.dataHash != keccak256(data) || trade.timestamp > block.timestamp) revert InvalidInput();\n        if ((trade.buy && trade.amount0 > 0) || (!trade.buy && trade.amount0 < 0)) revert InvalidInput();\n        uint256 gross = trade.buy ? uint256(-int256(trade.amount0)) + trade.feeEth : uint256(int256(trade.amount0));\n        // Fund the exact share from the existing programmable fee bucket.\n        // Protected owner/compute and all direct pool allocations stay intact.\n        uint256 prize = startedAt != 0 && trade.timestamp >= startedAt && trade.timestamp < endsAt() ? trade.feeEth / FEE_SHARE_DIVISOR : 0;\n        if (prize > trade.moduleFeeEth || trade.feeEth < trade.moduleFeeEth || trade.moduleFeeEth < gross * 2_000 / 1_000_000) revert InvalidInput();\n        if (reserveClaims() < recipientAccrued-recipientCollected + prizeAccrued-prizePaid + trade.moduleFeeEth) revert InsufficientBacking();\n        received[msg.sender][trade.id] = true;\n        recipientAccrued += trade.moduleFeeEth - prize;\n        prizeAccrued += prize;\n        pendingPot += prize;\n        if (prize != 0) emit PotFunded(trade.id, prize);\n        if (nextRound == ROUND_COUNT) _assignFinalPot();\n        // Bounded collection: only above a threshold, with a backoff after a\n        // failure so a broken recipient call is not retried on every swap.\n        // Prize claims are never pushed from here; winners or keepers pull.\n        uint256 pending = recipientAccrued-recipientCollected;\n        if (pending >= COLLECT_THRESHOLD && block.timestamp >= collectRetryAfter) {\n            try this.collectFees{gas:150_000}(pending) {} catch {\n                collectRetryAfter = block.timestamp + COLLECT_BACKOFF;\n                emit CollectionDeferred(trade.id,pending);\n            }\n        }\n        return IProgram.onTrade.selector;\n    }\n    function reserveClaims() public view returns (uint256) { return IDrawManager(MANAGER).balanceOf(address(this),0); }\n    function _checkBacking() private view {\n        if (reserveClaims() < recipientAccrued-recipientCollected + prizeAccrued-prizePaid) revert InsufficientBacking();\n    }\n    function collectFees(uint256 amount) external {\n        if (amount == 0 || amount > recipientAccrued-recipientCollected) revert InvalidInput();\n        _checkBacking();\n        recipientCollected += amount;\n        _pay(RECIPIENT,amount);\n        emit FeesCollected(amount);\n    }\n    function _pay(address to,uint256 amount) private {\n        if (_payment != 0) revert NotReady();\n        _payment = 1;\n        IDrawManager(MANAGER).unlock(abi.encode(to,amount));\n        if (_payment != 2) revert InvalidInput();\n        _payment = 0;\n    }\n    function unlockCallback(bytes calldata data) external returns (bytes memory) {\n        if (msg.sender != MANAGER || _payment != 1 || data.length != 64) revert Unauthorized();\n        (address to,uint256 amount) = abi.decode(data,(address,uint256));\n        _payment = 2;\n        IDrawManager(MANAGER).burn(address(this),0,amount);\n        IDrawManager(MANAGER).take(address(0),to,amount);\n        return \"\";\n    }\n}\n"},"src/IClausTradeProgram.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nlibrary ProgramTypes {\n    struct Trade {\n        uint256 id; address module; address sender; bool buy;\n        int128 amount0; int128 amount1; uint256 feeEth;\n        uint256 moduleFeeEth; uint256 blockNumber; uint256 timestamp; bytes32 dataHash;\n    }\n}\ninterface IProgram {\n    function quote(address, bool, int256, uint160, uint128, bytes calldata)\n        external view returns (uint256[6] memory);\n    function onTrade(ProgramTypes.Trade calldata, bytes calldata) external returns (bytes4);\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.26+commit.8a97fa7a","compilerSettings":{"viaIR":true,"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun","remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=lib/v4-core/","solmate/=lib/v4-core/lib/solmate/"]},"name":"ClausFreeDrawHook","fullyQualifiedName":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},"abi":[{"name":"AlreadyDone","type":"error","inputs":[]},{"name":"InsufficientBacking","type":"error","inputs":[]},{"name":"InvalidInput","type":"error","inputs":[]},{"name":"NotReady","type":"error","inputs":[]},{"name":"Unauthorized","type":"error","inputs":[]},{"name":"CampaignStarted","type":"event","inputs":[{"name":"at","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"announcementHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"name":"CollectionDeferred","type":"event","inputs":[{"name":"receiptId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"FeesCollected","type":"event","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"LatePotAssigned","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"NoEntrantsRemainder","type":"event","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PotFunded","type":"event","inputs":[{"name":"receiptId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PrizeExpired","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PrizePaid","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"beneficiary","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RandomnessReceived","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"requestId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"RandomnessRequested","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"requestId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"payer","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"name":"RoundSealed","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"root","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"entries","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"snapshotHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"requestId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"prize","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Winner","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"beneficiary","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"name":"CALLBACK_GAS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"name":"CLAIM_WINDOW","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"COLLECT_BACKOFF","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"COLLECT_THRESHOLD","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FEE_SHARE_DIVISOR","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"GOVERNANCE","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"MANAGER","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"RECIPIENT","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"ROUND_COUNT","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"ROUND_SECONDS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"SEAL_GRACE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"SPONSOR","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"VRF_WRAPPER","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"announcementHash","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"name":"claim","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"claimDeadline","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"claimTo","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"closesAt","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"collectFees","type":"function","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"collectRetryAfter","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"drawFee","type":"function","inputs":[{"name":"gasPriceWei","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"drawState","type":"function","inputs":[],"outputs":[{"name":"startTime","type":"uint256","internalType":"uint256"},{"name":"next","type":"uint256","internalType":"uint256"},{"name":"pot","type":"uint256","internalType":"uint256"},{"name":"lastEligible","type":"uint256","internalType":"uint256"},{"name":"accrued","type":"uint256","internalType":"uint256"},{"name":"paid","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"endsAt","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"finishSealing","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"lastEligibleRoundPlusOne","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"leaf","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"},{"name":"who","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"name":"lpRewardsPaused","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"nextRound","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"onTrade","type":"function","inputs":[{"name":"trade","type":"tuple","components":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"module","type":"address","internalType":"address"},{"name":"sender","type":"address","internalType":"address"},{"name":"buy","type":"bool","internalType":"bool"},{"name":"amount0","type":"int128","internalType":"int128"},{"name":"amount1","type":"int128","internalType":"int128"},{"name":"feeEth","type":"uint256","internalType":"uint256"},{"name":"moduleFeeEth","type":"uint256","internalType":"uint256"},{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"dataHash","type":"bytes32","internalType":"bytes32"}],"internalType":"struct ProgramTypes.Trade"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"name":"pendingPot","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"prizeAccrued","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"prizePaid","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"quote","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"},{"name":"","type":"int256","internalType":"int256"},{"name":"","type":"uint160","internalType":"uint160"},{"name":"","type":"uint128","internalType":"uint128"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256[6]","internalType":"uint256[6]"}],"stateMutability":"pure"},{"name":"rawFulfillRandomWords","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"words","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"received","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"recipientAccrued","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"recipientCollected","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"requestedAt","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"reserveClaims","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"rounds","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"root","type":"bytes32","internalType":"bytes32"},{"name":"snapshotHash","type":"bytes32","internalType":"bytes32"},{"name":"entries","type":"uint32","internalType":"uint32"},{"name":"closed","type":"bool","internalType":"bool"},{"name":"randomReady","type":"bool","internalType":"bool"},{"name":"settled","type":"bool","internalType":"bool"},{"name":"claimed","type":"bool","internalType":"bool"},{"name":"requestId","type":"uint256","internalType":"uint256"},{"name":"randomWord","type":"uint256","internalType":"uint256"},{"name":"winner","type":"address","internalType":"address"},{"name":"prize","type":"uint256","internalType":"uint256"},{"name":"paid","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"seal","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"root","type":"bytes32","internalType":"bytes32"},{"name":"count","type":"uint32","internalType":"uint32"},{"name":"snapshotHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"payable"},{"name":"sealDeadline","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"settle","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"who","type":"address","internalType":"address"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"start","type":"function","inputs":[{"name":"sourceHash","type":"bytes32","internalType":"bytes32"},{"name":"opensAt","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"startedAt","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"sweepExpired","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"unlockCallback","type":"function","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"name":"AlreadyDone","type":"error"},{"inputs":[],"name":"InsufficientBacking","type":"error"},{"inputs":[],"name":"InvalidInput","type":"error"},{"inputs":[],"name":"NotReady","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"at","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"announcementHash","type":"bytes32"}],"name":"CampaignStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"receiptId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CollectionDeferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeesCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LatePotAssigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NoEntrantsRemainder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"receiptId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PotFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PrizeExpired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PrizePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"RandomnessReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"address","name":"payer","type":"address"}],"name":"RandomnessRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"entries","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"snapshotHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prize","type":"uint256"}],"name":"RoundSealed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"}],"name":"Winner","type":"event"},{"inputs":[],"name":"CALLBACK_GAS","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIM_WINDOW","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECT_BACKOFF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECT_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_SHARE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RECIPIENT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUND_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUND_SECONDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEAL_GRACE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPONSOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VRF_WRAPPER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"announcementHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"name":"closesAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"collectFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectRetryAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gasPriceWei","type":"uint256"}],"name":"drawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"drawState","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"next","type":"uint256"},{"internalType":"uint256","name":"pot","type":"uint256"},{"internalType":"uint256","name":"lastEligible","type":"uint256"},{"internalType":"uint256","name":"accrued","type":"uint256"},{"internalType":"uint256","name":"paid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishSealing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastEligibleRoundPlusOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"who","type":"address"}],"name":"leaf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"module","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"int128","name":"amount0","type":"int128"},{"internalType":"int128","name":"amount1","type":"int128"},{"internalType":"uint256","name":"feeEth","type":"uint256"},{"internalType":"uint256","name":"moduleFeeEth","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"internalType":"struct ProgramTypes.Trade","name":"trade","type":"tuple"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTrade","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingPot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prizeAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prizePaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint160","name":"","type":"uint160"},{"internalType":"uint128","name":"","type":"uint128"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"quote","outputs":[{"internalType":"uint256[6]","name":"","type":"uint256[6]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[]","name":"words","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"received","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipientAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipientCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"bytes32","name":"snapshotHash","type":"bytes32"},{"internalType":"uint32","name":"entries","type":"uint32"},{"internalType":"bool","name":"closed","type":"bool"},{"internalType":"bool","name":"randomReady","type":"bool"},{"internalType":"bool","name":"settled","type":"bool"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256","name":"randomWord","type":"uint256"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"prize","type":"uint256"},{"internalType":"uint256","name":"paid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint32","name":"count","type":"uint32"},{"internalType":"bytes32","name":"snapshotHash","type":"bytes32"}],"name":"seal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"sealDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"},{"internalType":"address","name":"who","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"settle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sourceHash","type":"bytes32"},{"internalType":"uint256","name":"opensAt","type":"uint256"}],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"name":"sweepExpired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlockCallback","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"claim(uint256)":{"notice":"Anyone may pay a settled winner their outstanding prize."},"claimDeadline()":{"notice":"After this time unpaid prizes may be returned to RECIPIENT and late receipts no longer top up a winner."},"finishSealing()":{"notice":"Only used after the grace period if the operator missed rounds. Never cancels a random request or redirects any assigned winning claim."},"quote(address,bool,int256,uint160,uint128,bytes)":{"notice":"The wrapper adds the existing 0.1% protected compute allocation. Total trading fees stay at 2.3%, before, during and after the campaign."},"rawFulfillRandomWords(uint256,uint256[])":{"notice":"Only the round's original request can supply its result. Duplicate callbacks and callbacks after expiry settlement are ignored."},"seal(uint256,bytes32,uint32,bytes32)":{"notice":"Freeze rounds in order. An empty round carries its available pot forward. Oracle costs come from the caller, never from collected prizes."},"start(bytes32,uint256)":{"notice":"The future start avoids ambiguous pre-start receipts in the same block. Activation must also honor the separate published advance notice."},"sweepExpired(uint256)":{"notice":"After the claim window, any unpaid prize (unanswered oracle, unclaimed or undeliverable) returns to the existing inference recipient. Inside the window no winner is ever redirected."}},"notice":"Free-entry community draws funded by 0.1% of existing collected swap fees. The total trading fee never increases. Swaps and holdings NEVER create entries or improve odds. The collector publishes an ordered free-address list before each VRF request. Admission relies on that collector; this is not trustless proof of personhood. Each frozen round has exactly one VRF request. A missing answer is never re-requested: competing results would let fulfillment ordering bias winners. Winners pull their prize; trade receipts never push claims. Prizes still unpaid after the claim window return to the existing inference recipient, never to an arbitrary caller.","version":1}},"settings":{"compilationTarget":{"src/ClausFreeDrawHook.sol":"ClausFreeDrawHook"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",":@uniswap/v4-core/=lib/v4-core/",":solmate/=lib/v4-core/lib/solmate/"],"viaIR":true},"sources":{"src/ClausFreeDrawHook.sol":{"keccak256":"0x372922b3969e383c3a25eef148805a68c5350514d812aaa31027e309ea2a6345","license":"MIT","urls":["bzz-raw://26e75e93e1bf969da42d47edfe717323fa8c8cd970a03054596c945d53f07f4b","dweb:/ipfs/QmYQv85YqYBYb98a7KSTkWHNbVPSuoi4T2tUVZWwTAYiji"]},"src/IClausTradeProgram.sol":{"keccak256":"0xea91e1d61152d4e7bb7693429028a3358308eb46857dcffa25275bfcb3f293b0","license":"MIT","urls":["bzz-raw://fb10700139b9ca8628e798cc93c0eff792c48d1bfac25393e2e2e1d1ce5203e3","dweb:/ipfs/Qmd5hMuHRi6YhxFVC7hWrhmwbndUaZfNx5HkAbpwUAJNHz"]}},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_uint32":{"label":"uint32","encoding":"inplace","numberOfBytes":"4"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_struct(Round)158_storage":{"label":"struct ClausFreeDrawHook.Round","members":[{"slot":"0","type":"t_bytes32","astId":135,"label":"root","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"1","type":"t_bytes32","astId":137,"label":"snapshotHash","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_uint32","astId":139,"label":"entries","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":141,"label":"closed","offset":4,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":143,"label":"randomReady","offset":5,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":145,"label":"settled","offset":6,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":147,"label":"claimed","offset":7,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"3","type":"t_uint256","astId":149,"label":"requestId","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"4","type":"t_uint256","astId":151,"label":"randomWord","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"5","type":"t_address","astId":153,"label":"winner","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"6","type":"t_uint256","astId":155,"label":"prize","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"7","type":"t_uint256","astId":157,"label":"paid","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"}],"encoding":"inplace","numberOfBytes":"256"},"t_mapping(t_uint256,t_bool)":{"key":"t_uint256","label":"mapping(uint256 => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_uint256)":{"key":"t_uint256","label":"mapping(uint256 => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_struct(Round)158_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct ClausFreeDrawHook.Round)","value":"t_struct(Round)158_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_uint256,t_bool))":{"key":"t_address","label":"mapping(address => mapping(uint256 => bool))","value":"t_mapping(t_uint256,t_bool)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_uint256,t_struct(Round)158_storage)","astId":163,"label":"rounds","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"1","type":"t_mapping(t_uint256,t_uint256)","astId":167,"label":"requestedAt","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_mapping(t_uint256,t_uint256)","astId":171,"label":"_requestRoundPlusOne","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"3","type":"t_mapping(t_address,t_mapping(t_uint256,t_bool))","astId":177,"label":"received","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"4","type":"t_uint256","astId":179,"label":"startedAt","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"5","type":"t_bytes32","astId":181,"label":"announcementHash","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"6","type":"t_uint256","astId":183,"label":"nextRound","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"7","type":"t_uint256","astId":185,"label":"lastEligibleRoundPlusOne","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"8","type":"t_uint256","astId":187,"label":"pendingPot","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"9","type":"t_uint256","astId":189,"label":"prizeAccrued","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"10","type":"t_uint256","astId":191,"label":"prizePaid","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"11","type":"t_uint256","astId":193,"label":"recipientAccrued","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"12","type":"t_uint256","astId":195,"label":"recipientCollected","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"13","type":"t_uint256","astId":197,"label":"collectRetryAfter","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"14","type":"t_uint256","astId":199,"label":"_payment","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"}]},"transientStorageLayout":null,"userdoc":{"kind":"user","notice":"Free-entry community draws funded by 0.1% of existing collected swap fees. The total trading fee never increases. Swaps and holdings NEVER create entries or improve odds. The collector publishes an ordered free-address list before each VRF request. Admission relies on that collector; this is not trustless proof of personhood. Each frozen round has exactly one VRF request. A missing answer is never re-requested: competing results would let fulfillment ordering bias winners. Winners pull their prize; trade receipts never push claims. Prizes still unpaid after the claim window return to the existing inference recipient, never to an arbitrary caller.","methods":{"claim(uint256)":{"notice":"Anyone may pay a settled winner their outstanding prize."},"claimDeadline()":{"notice":"After this time unpaid prizes may be returned to RECIPIENT and late receipts no longer top up a winner."},"finishSealing()":{"notice":"Only used after the grace period if the operator missed rounds. Never cancels a random request or redirects any assigned winning claim."},"sweepExpired(uint256)":{"notice":"After the claim window, any unpaid prize (unanswered oracle, unclaimed or undeliverable) returns to the existing inference recipient. Inside the window no winner is ever redirected."},"start(bytes32,uint256)":{"notice":"The future start avoids ambiguous pre-start receipts in the same block. Activation must also honor the separate published advance notice."},"seal(uint256,bytes32,uint32,bytes32)":{"notice":"Freeze rounds in order. An empty round carries its available pot forward. Oracle costs come from the caller, never from collected prizes."},"rawFulfillRandomWords(uint256,uint256[])":{"notice":"Only the round's original request can supply its result. Duplicate callbacks and callbacks after expiry settlement are ignored."},"quote(address,bool,int256,uint160,uint128,bytes)":{"notice":"The wrapper adds the existing 0.1% protected compute allocation. Total trading fees stay at 2.3%, before, during and after the campaign."}},"version":1},"devdoc":{"kind":"dev","methods":{},"version":1},"sourceIds":{"src/ClausFreeDrawHook.sol":{"id":0},"src/IClausTradeProgram.sol":{"id":1}},"additionalInput":null,"stdJsonInput":{"sources":{"src/ClausFreeDrawHook.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nimport {IProgram, ProgramTypes} from \"./IClausTradeProgram.sol\";\n\ninterface IDrawGovernance {\n    function adapterFor(address) external view returns (address);\n    function approvedAdapter(address) external view returns (bool);\n}\ninterface IDrawManager {\n    function balanceOf(address, uint256) external view returns (uint256);\n    function unlock(bytes calldata) external returns (bytes memory);\n    function burn(address, uint256, uint256) external;\n    function take(address, address, uint256) external;\n}\ninterface IDrawVRF {\n    function calculateRequestPriceNative(uint32, uint32) external view returns (uint256);\n    function estimateRequestPriceNative(uint32, uint32, uint256) external view returns (uint256);\n    function requestRandomWordsInNative(uint32, uint16, uint32, bytes calldata) external payable returns (uint256);\n}\n\n/// @notice Free-entry community draws funded by 0.1% of existing collected\n/// swap fees. The total trading fee never increases. Swaps and holdings NEVER\n/// create entries or improve odds.\n/// The collector publishes an ordered free-address list before each VRF request.\n/// Admission relies on that collector; this is not trustless proof of personhood.\n/// Each frozen round has exactly one VRF request. A missing answer is never\n/// re-requested: competing results would let fulfillment ordering bias winners.\n/// Winners pull their prize;\n/// trade receipts never push claims. Prizes still unpaid after the claim window\n/// return to the existing inference recipient, never to an arbitrary caller.\ncontract ClausFreeDrawHook is IProgram {\n    address public constant GOVERNANCE = 0x180eAE784dEe739FBab432B06f78bF9a98Aae334;\n    address public constant MANAGER = 0x000000000004444c5dc75cB358380D2e3dE08A90;\n    address public constant RECIPIENT = 0x5a428Ea2f282EFfBf15BAa87F1437f8C2f4fd995;\n    address public constant SPONSOR = 0x8aCA8890D34086D7a30B9c06fAe25E0C3cda4cFa;\n    address public constant VRF_WRAPPER = 0x02aae1A04f9828517b3007f83f6181900CaD910c;\n    uint256 public constant FEE_SHARE_DIVISOR = 1_000;\n    uint256 public constant ROUND_SECONDS = 4 hours;\n    uint256 public constant ROUND_COUNT = 42;\n    uint256 public constant SEAL_GRACE = 7 days;\n    uint256 public constant CLAIM_WINDOW = 30 days;\n    uint256 public constant COLLECT_THRESHOLD = 0.01 ether;\n    uint256 public constant COLLECT_BACKOFF = 1 hours;\n    uint32 public constant CALLBACK_GAS = 100_000;\n    bool public constant lpRewardsPaused = true;\n\n    struct Round {\n        bytes32 root;\n        bytes32 snapshotHash;\n        uint32 entries;\n        bool closed;\n        bool randomReady;\n        bool settled;\n        bool claimed;\n        uint256 requestId;\n        uint256 randomWord;\n        address winner;\n        uint256 prize;\n        uint256 paid;\n    }\n    mapping(uint256 => Round) public rounds;\n    mapping(uint256 => uint256) public requestedAt;\n    mapping(uint256 => uint256) private _requestRoundPlusOne;\n    mapping(address => mapping(uint256 => bool)) public received;\n    uint256 public startedAt;\n    bytes32 public announcementHash;\n    uint256 public nextRound;\n    uint256 public lastEligibleRoundPlusOne;\n    uint256 public pendingPot;\n    uint256 public prizeAccrued;\n    uint256 public prizePaid;\n    uint256 public recipientAccrued;\n    uint256 public recipientCollected;\n    uint256 public collectRetryAfter;\n    uint256 private _payment;\n\n    error Unauthorized();\n    error InvalidInput();\n    error NotReady();\n    error AlreadyDone();\n    error InsufficientBacking();\n\n    event CampaignStarted(uint256 at, bytes32 announcementHash);\n    event RoundSealed(uint256 indexed round, bytes32 root, uint256 entries, bytes32 snapshotHash, uint256 requestId, uint256 prize);\n    event RandomnessRequested(uint256 indexed round, uint256 indexed requestId, address payer);\n    event RandomnessReceived(uint256 indexed round, uint256 indexed requestId);\n    event Winner(uint256 indexed round, uint256 index, address beneficiary);\n    event PrizePaid(uint256 indexed round, address indexed beneficiary, address to, uint256 amount);\n    event PrizeExpired(uint256 indexed round, uint256 amount);\n    event PotFunded(uint256 indexed receiptId, uint256 amount);\n    event LatePotAssigned(uint256 indexed round, uint256 amount);\n    event NoEntrantsRemainder(uint256 amount);\n    event FeesCollected(uint256 amount);\n    event CollectionDeferred(uint256 indexed receiptId, uint256 amount);\n\n    modifier onlySponsor() { if (msg.sender != SPONSOR) revert Unauthorized(); _; }\n\n    /// @notice The future start avoids ambiguous pre-start receipts in the same\n    /// block. Activation must also honor the separate published advance notice.\n    function start(bytes32 sourceHash, uint256 opensAt) external onlySponsor {\n        if (startedAt != 0) revert AlreadyDone();\n        if (sourceHash == bytes32(0) || opensAt <= block.timestamp || opensAt > block.timestamp + 7 days) revert InvalidInput();\n        startedAt = opensAt;\n        announcementHash = sourceHash;\n        emit CampaignStarted(opensAt, sourceHash);\n    }\n\n    function endsAt() public view returns (uint256) { return startedAt + ROUND_COUNT * ROUND_SECONDS; }\n    function closesAt(uint256 r) public view returns (uint256) {\n        if (startedAt == 0 || r >= ROUND_COUNT) revert InvalidInput();\n        return startedAt + (r + 1) * ROUND_SECONDS;\n    }\n    function sealDeadline() public view returns (uint256) {\n        if (startedAt == 0) revert NotReady();\n        return endsAt() + SEAL_GRACE;\n    }\n    /// @notice After this time unpaid prizes may be returned to RECIPIENT and\n    /// late receipts no longer top up a winner.\n    function claimDeadline() public view returns (uint256) { return sealDeadline() + CLAIM_WINDOW; }\n    function drawFee(uint256 gasPriceWei) external view returns (uint256) {\n        return IDrawVRF(VRF_WRAPPER).estimateRequestPriceNative(CALLBACK_GAS, 1, gasPriceWei);\n    }\n    function drawState() external view returns (uint256 startTime, uint256 next, uint256 pot, uint256 lastEligible, uint256 accrued, uint256 paid) {\n        return (startedAt, nextRound, pendingPot, lastEligibleRoundPlusOne, prizeAccrued, prizePaid);\n    }\n\n    /// @notice Freeze rounds in order. An empty round carries its available pot\n    /// forward. Oracle costs come from the caller, never from collected prizes.\n    function seal(uint256 r, bytes32 root, uint32 count, bytes32 snapshotHash) external payable onlySponsor {\n        if (r != nextRound || block.timestamp < closesAt(r) || block.timestamp > sealDeadline()) revert NotReady();\n        if (snapshotHash == bytes32(0) || (count == 0) != (root == bytes32(0))) revert InvalidInput();\n        Round storage round = rounds[r];\n        if (round.closed) revert AlreadyDone();\n        round.closed = true;\n        round.root = root;\n        round.entries = count;\n        round.snapshotHash = snapshotHash;\n        nextRound = r + 1;\n        if (count == 0) {\n            if (msg.value != 0) revert InvalidInput();\n            round.settled = true;\n        } else {\n            _checkBacking();\n            lastEligibleRoundPlusOne = r + 1;\n            round.prize = pendingPot;\n            pendingPot = 0;\n            _requestRandom(r, round, SPONSOR);\n        }\n        if (nextRound == ROUND_COUNT) _assignFinalPot();\n        emit RoundSealed(r, root, count, snapshotHash, round.requestId, round.prize);\n    }\n\n    function _requestRandom(uint256 r, Round storage round, address payer) private {\n        if (round.requestId != 0) revert AlreadyDone();\n        IDrawVRF vrf = IDrawVRF(VRF_WRAPPER);\n        uint256 fee = vrf.calculateRequestPriceNative(CALLBACK_GAS, 1);\n        if (msg.value < fee) revert InvalidInput();\n        uint256 id = vrf.requestRandomWordsInNative{value:fee}(CALLBACK_GAS, 3, 1, abi.encodeWithSelector(bytes4(keccak256(\"VRF ExtraArgsV1\")), true));\n        if (id == 0 || _requestRoundPlusOne[id] != 0) revert InvalidInput();\n        round.requestId = id;\n        requestedAt[r] = block.timestamp;\n        _requestRoundPlusOne[id] = r + 1;\n        emit RandomnessRequested(r, id, payer);\n        if (msg.value > fee) {\n            (bool ok,) = payer.call{value:msg.value-fee}(\"\");\n            if (!ok) revert InvalidInput();\n        }\n    }\n\n    /// @notice Only the round's original request can supply its result.\n    /// Duplicate callbacks and callbacks after expiry settlement are ignored.\n    function rawFulfillRandomWords(uint256 id, uint256[] calldata words) external {\n        if (msg.sender != VRF_WRAPPER) revert Unauthorized();\n        uint256 rp = _requestRoundPlusOne[id];\n        if (rp == 0 || words.length != 1) return;\n        Round storage round = rounds[rp-1];\n        if (id != round.requestId || round.randomReady || round.settled) return;\n        round.randomWord = words[0];\n        round.randomReady = true;\n        emit RandomnessReceived(rp-1, id);\n    }\n\n    function leaf(uint256 r, uint256 index, address who) public view returns (bytes32) {\n        return keccak256(bytes.concat(keccak256(abi.encode(block.chainid, address(this), r, index, who))));\n    }\n    function settle(uint256 r, address who, bytes32[] calldata proof) external {\n        if (block.timestamp > claimDeadline()) revert NotReady();\n        Round storage round = rounds[r];\n        if (!round.randomReady || round.entries == 0) revert NotReady();\n        if (round.settled) revert AlreadyDone();\n        if (who == address(0)) revert InvalidInput();\n        uint256 index = round.randomWord % round.entries;\n        bytes32 hash = leaf(r, index, who);\n        for (uint256 i; i < proof.length; ++i) {\n            bytes32 sibling = proof[i];\n            hash = hash < sibling ? keccak256(abi.encodePacked(hash, sibling)) : keccak256(abi.encodePacked(sibling, hash));\n        }\n        if (hash != round.root) revert InvalidInput();\n        round.settled = true;\n        round.winner = who;\n        emit Winner(r, index, who);\n    }\n    /// @notice Anyone may pay a settled winner their outstanding prize.\n    function claim(uint256 r) external { _claim(r, rounds[r].winner); }\n    function claimTo(uint256 r, address to) external {\n        if (msg.sender != rounds[r].winner) revert Unauthorized();\n        _claim(r, to);\n    }\n    function _claim(uint256 r, address to) private {\n        if (block.timestamp > claimDeadline()) revert NotReady();\n        Round storage round = rounds[r];\n        if (!round.settled || round.winner == address(0) || to == address(0)) revert NotReady();\n        uint256 amount = round.prize - round.paid;\n        if (amount == 0) revert AlreadyDone();\n        _checkBacking();\n        round.paid = round.prize;\n        round.claimed = true;\n        prizePaid += amount;\n        _pay(to, amount);\n        emit PrizePaid(r, round.winner, to, amount);\n    }\n\n    /// @notice After the claim window, any unpaid prize (unanswered oracle,\n    /// unclaimed or undeliverable) returns to the existing inference recipient.\n    /// Inside the window no winner is ever redirected.\n    function sweepExpired(uint256 r) external {\n        if (block.timestamp <= claimDeadline()) revert NotReady();\n        Round storage round = rounds[r];\n        uint256 amount = round.prize - round.paid;\n        if (amount == 0) revert AlreadyDone();\n        round.paid = round.prize;\n        round.settled = true;\n        prizeAccrued -= amount;\n        recipientAccrued += amount;\n        emit PrizeExpired(r, amount);\n    }\n\n    /// @notice Only used after the grace period if the operator missed rounds.\n    /// Never cancels a random request or redirects any assigned winning claim.\n    function finishSealing() external {\n        if (block.timestamp <= sealDeadline()) revert NotReady();\n        nextRound = ROUND_COUNT;\n        _assignFinalPot();\n    }\n    function _assignFinalPot() private {\n        uint256 amount = pendingPot;\n        if (amount == 0) return;\n        pendingPot = 0;\n        if (lastEligibleRoundPlusOne != 0 && block.timestamp <= claimDeadline()) {\n            Round storage round = rounds[lastEligibleRoundPlusOne-1];\n            round.prize += amount;\n            round.claimed = false;\n            emit LatePotAssigned(lastEligibleRoundPlusOne-1, amount);\n        } else {\n            // No eligible draw, or the claim window has closed: return the\n            // fee share to the pre-existing inference recipient.\n            prizeAccrued -= amount;\n            recipientAccrued += amount;\n            emit NoEntrantsRemainder(amount);\n        }\n    }\n\n    /// @notice The wrapper adds the existing 0.1% protected compute allocation.\n    /// Total trading fees stay at 2.3%, before, during and after the campaign.\n    function quote(address, bool, int256, uint160, uint128, bytes calldata) external pure returns (uint256[6] memory) {\n        return [uint256(12_000), 3_000, 1_500, 0, 3_500, 2_000];\n    }\n\n    function onTrade(ProgramTypes.Trade calldata trade, bytes calldata data) external returns (bytes4) {\n        IDrawGovernance g = IDrawGovernance(GOVERNANCE);\n        if (msg.sender != g.adapterFor(address(this)) || !g.approvedAdapter(msg.sender)) revert Unauthorized();\n        if (trade.module != msg.sender || received[msg.sender][trade.id] || trade.dataHash != keccak256(data) || trade.timestamp > block.timestamp) revert InvalidInput();\n        if ((trade.buy && trade.amount0 > 0) || (!trade.buy && trade.amount0 < 0)) revert InvalidInput();\n        uint256 gross = trade.buy ? uint256(-int256(trade.amount0)) + trade.feeEth : uint256(int256(trade.amount0));\n        // Fund the exact share from the existing programmable fee bucket.\n        // Protected owner/compute and all direct pool allocations stay intact.\n        uint256 prize = startedAt != 0 && trade.timestamp >= startedAt && trade.timestamp < endsAt() ? trade.feeEth / FEE_SHARE_DIVISOR : 0;\n        if (prize > trade.moduleFeeEth || trade.feeEth < trade.moduleFeeEth || trade.moduleFeeEth < gross * 2_000 / 1_000_000) revert InvalidInput();\n        if (reserveClaims() < recipientAccrued-recipientCollected + prizeAccrued-prizePaid + trade.moduleFeeEth) revert InsufficientBacking();\n        received[msg.sender][trade.id] = true;\n        recipientAccrued += trade.moduleFeeEth - prize;\n        prizeAccrued += prize;\n        pendingPot += prize;\n        if (prize != 0) emit PotFunded(trade.id, prize);\n        if (nextRound == ROUND_COUNT) _assignFinalPot();\n        // Bounded collection: only above a threshold, with a backoff after a\n        // failure so a broken recipient call is not retried on every swap.\n        // Prize claims are never pushed from here; winners or keepers pull.\n        uint256 pending = recipientAccrued-recipientCollected;\n        if (pending >= COLLECT_THRESHOLD && block.timestamp >= collectRetryAfter) {\n            try this.collectFees{gas:150_000}(pending) {} catch {\n                collectRetryAfter = block.timestamp + COLLECT_BACKOFF;\n                emit CollectionDeferred(trade.id,pending);\n            }\n        }\n        return IProgram.onTrade.selector;\n    }\n    function reserveClaims() public view returns (uint256) { return IDrawManager(MANAGER).balanceOf(address(this),0); }\n    function _checkBacking() private view {\n        if (reserveClaims() < recipientAccrued-recipientCollected + prizeAccrued-prizePaid) revert InsufficientBacking();\n    }\n    function collectFees(uint256 amount) external {\n        if (amount == 0 || amount > recipientAccrued-recipientCollected) revert InvalidInput();\n        _checkBacking();\n        recipientCollected += amount;\n        _pay(RECIPIENT,amount);\n        emit FeesCollected(amount);\n    }\n    function _pay(address to,uint256 amount) private {\n        if (_payment != 0) revert NotReady();\n        _payment = 1;\n        IDrawManager(MANAGER).unlock(abi.encode(to,amount));\n        if (_payment != 2) revert InvalidInput();\n        _payment = 0;\n    }\n    function unlockCallback(bytes calldata data) external returns (bytes memory) {\n        if (msg.sender != MANAGER || _payment != 1 || data.length != 64) revert Unauthorized();\n        (address to,uint256 amount) = abi.decode(data,(address,uint256));\n        _payment = 2;\n        IDrawManager(MANAGER).burn(address(this),0,amount);\n        IDrawManager(MANAGER).take(address(0),to,amount);\n        return \"\";\n    }\n}\n"},"src/IClausTradeProgram.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nlibrary ProgramTypes {\n    struct Trade {\n        uint256 id; address module; address sender; bool buy;\n        int128 amount0; int128 amount1; uint256 feeEth;\n        uint256 moduleFeeEth; uint256 blockNumber; uint256 timestamp; bytes32 dataHash;\n    }\n}\ninterface IProgram {\n    function quote(address, bool, int256, uint160, uint128, bytes calldata)\n        external view returns (uint256[6] memory);\n    function onTrade(ProgramTypes.Trade calldata, bytes calldata) external returns (bytes4);\n}\n"}},"language":"Solidity","settings":{"viaIR":true,"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun","remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=lib/v4-core/","solmate/=lib/v4-core/lib/solmate/"]}},"stdJsonOutput":{"sources":{"src/ClausFreeDrawHook.sol":{"id":0},"src/IClausTradeProgram.sol":{"id":1}},"contracts":{"src/ClausFreeDrawHook.sol":{"ClausFreeDrawHook":{"abi":[{"name":"AlreadyDone","type":"error","inputs":[]},{"name":"InsufficientBacking","type":"error","inputs":[]},{"name":"InvalidInput","type":"error","inputs":[]},{"name":"NotReady","type":"error","inputs":[]},{"name":"Unauthorized","type":"error","inputs":[]},{"name":"CampaignStarted","type":"event","inputs":[{"name":"at","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"announcementHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"name":"CollectionDeferred","type":"event","inputs":[{"name":"receiptId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"FeesCollected","type":"event","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"LatePotAssigned","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"NoEntrantsRemainder","type":"event","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PotFunded","type":"event","inputs":[{"name":"receiptId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PrizeExpired","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"PrizePaid","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"beneficiary","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RandomnessReceived","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"requestId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"name":"RandomnessRequested","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"requestId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"payer","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"name":"RoundSealed","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"root","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"entries","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"snapshotHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"requestId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"prize","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Winner","type":"event","inputs":[{"name":"round","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"beneficiary","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"name":"CALLBACK_GAS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"name":"CLAIM_WINDOW","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"COLLECT_BACKOFF","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"COLLECT_THRESHOLD","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"FEE_SHARE_DIVISOR","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"GOVERNANCE","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"MANAGER","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"RECIPIENT","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"ROUND_COUNT","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"ROUND_SECONDS","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"SEAL_GRACE","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"SPONSOR","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"VRF_WRAPPER","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"announcementHash","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"name":"claim","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"claimDeadline","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"claimTo","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"closesAt","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"collectFees","type":"function","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"collectRetryAfter","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"drawFee","type":"function","inputs":[{"name":"gasPriceWei","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"drawState","type":"function","inputs":[],"outputs":[{"name":"startTime","type":"uint256","internalType":"uint256"},{"name":"next","type":"uint256","internalType":"uint256"},{"name":"pot","type":"uint256","internalType":"uint256"},{"name":"lastEligible","type":"uint256","internalType":"uint256"},{"name":"accrued","type":"uint256","internalType":"uint256"},{"name":"paid","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"endsAt","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"finishSealing","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"lastEligibleRoundPlusOne","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"leaf","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"},{"name":"who","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"name":"lpRewardsPaused","type":"function","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"nextRound","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"onTrade","type":"function","inputs":[{"name":"trade","type":"tuple","components":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"module","type":"address","internalType":"address"},{"name":"sender","type":"address","internalType":"address"},{"name":"buy","type":"bool","internalType":"bool"},{"name":"amount0","type":"int128","internalType":"int128"},{"name":"amount1","type":"int128","internalType":"int128"},{"name":"feeEth","type":"uint256","internalType":"uint256"},{"name":"moduleFeeEth","type":"uint256","internalType":"uint256"},{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"dataHash","type":"bytes32","internalType":"bytes32"}],"internalType":"struct ProgramTypes.Trade"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"name":"pendingPot","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"prizeAccrued","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"prizePaid","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"quote","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"},{"name":"","type":"int256","internalType":"int256"},{"name":"","type":"uint160","internalType":"uint160"},{"name":"","type":"uint128","internalType":"uint128"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"uint256[6]","internalType":"uint256[6]"}],"stateMutability":"pure"},{"name":"rawFulfillRandomWords","type":"function","inputs":[{"name":"id","type":"uint256","internalType":"uint256"},{"name":"words","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"received","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"recipientAccrued","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"recipientCollected","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"requestedAt","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"reserveClaims","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"rounds","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"root","type":"bytes32","internalType":"bytes32"},{"name":"snapshotHash","type":"bytes32","internalType":"bytes32"},{"name":"entries","type":"uint32","internalType":"uint32"},{"name":"closed","type":"bool","internalType":"bool"},{"name":"randomReady","type":"bool","internalType":"bool"},{"name":"settled","type":"bool","internalType":"bool"},{"name":"claimed","type":"bool","internalType":"bool"},{"name":"requestId","type":"uint256","internalType":"uint256"},{"name":"randomWord","type":"uint256","internalType":"uint256"},{"name":"winner","type":"address","internalType":"address"},{"name":"prize","type":"uint256","internalType":"uint256"},{"name":"paid","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"seal","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"root","type":"bytes32","internalType":"bytes32"},{"name":"count","type":"uint32","internalType":"uint32"},{"name":"snapshotHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"payable"},{"name":"sealDeadline","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"settle","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"},{"name":"who","type":"address","internalType":"address"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"start","type":"function","inputs":[{"name":"sourceHash","type":"bytes32","internalType":"bytes32"},{"name":"opensAt","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"startedAt","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"sweepExpired","type":"function","inputs":[{"name":"r","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"unlockCallback","type":"function","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"}],"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyDone\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBacking\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotReady\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"at\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"announcementHash\",\"type\":\"bytes32\"}],\"name\":\"CampaignStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"receiptId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CollectionDeferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeesCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LatePotAssigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NoEntrantsRemainder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"receiptId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PotFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PrizeExpired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PrizePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"RandomnessReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"}],\"name\":\"RandomnessRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"entries\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"snapshotHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"prize\",\"type\":\"uint256\"}],\"name\":\"RoundSealed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"Winner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CALLBACK_GAS\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CLAIM_WINDOW\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLECT_BACKOFF\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLECT_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_SHARE_DIVISOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GOVERNANCE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RECIPIENT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROUND_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROUND_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEAL_GRACE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SPONSOR\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VRF_WRAPPER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"announcementHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"claimTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"}],\"name\":\"closesAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"collectFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectRetryAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasPriceWei\",\"type\":\"uint256\"}],\"name\":\"drawFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"drawState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"next\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastEligible\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accrued\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paid\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endsAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finishSealing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastEligibleRoundPlusOne\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"leaf\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lpRewardsPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"buy\",\"type\":\"bool\"},{\"internalType\":\"int128\",\"name\":\"amount0\",\"type\":\"int128\"},{\"internalType\":\"int128\",\"name\":\"amount1\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeEth\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"moduleFeeEth\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct ProgramTypes.Trade\",\"name\":\"trade\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTrade\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingPot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prizeAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prizePaid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"uint256[6]\",\"name\":\"\",\"type\":\"uint256[6]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"words\",\"type\":\"uint256[]\"}],\"name\":\"rawFulfillRandomWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"received\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipientAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recipientCollected\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"requestedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveClaims\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rounds\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"snapshotHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"entries\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"closed\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"randomReady\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"settled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"claimed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"randomWord\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"prize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paid\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"snapshotHash\",\"type\":\"bytes32\"}],\"name\":\"seal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sealDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"settle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"opensAt\",\"type\":\"uint256\"}],\"name\":\"start\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"r\",\"type\":\"uint256\"}],\"name\":\"sweepExpired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlockCallback\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"claim(uint256)\":{\"notice\":\"Anyone may pay a settled winner their outstanding prize.\"},\"claimDeadline()\":{\"notice\":\"After this time unpaid prizes may be returned to RECIPIENT and late receipts no longer top up a winner.\"},\"finishSealing()\":{\"notice\":\"Only used after the grace period if the operator missed rounds. Never cancels a random request or redirects any assigned winning claim.\"},\"quote(address,bool,int256,uint160,uint128,bytes)\":{\"notice\":\"The wrapper adds the existing 0.1% protected compute allocation. Total trading fees stay at 2.3%, before, during and after the campaign.\"},\"rawFulfillRandomWords(uint256,uint256[])\":{\"notice\":\"Only the round's original request can supply its result. Duplicate callbacks and callbacks after expiry settlement are ignored.\"},\"seal(uint256,bytes32,uint32,bytes32)\":{\"notice\":\"Freeze rounds in order. An empty round carries its available pot forward. Oracle costs come from the caller, never from collected prizes.\"},\"start(bytes32,uint256)\":{\"notice\":\"The future start avoids ambiguous pre-start receipts in the same block. Activation must also honor the separate published advance notice.\"},\"sweepExpired(uint256)\":{\"notice\":\"After the claim window, any unpaid prize (unanswered oracle, unclaimed or undeliverable) returns to the existing inference recipient. Inside the window no winner is ever redirected.\"}},\"notice\":\"Free-entry community draws funded by 0.1% of existing collected swap fees. The total trading fee never increases. Swaps and holdings NEVER create entries or improve odds. The collector publishes an ordered free-address list before each VRF request. Admission relies on that collector; this is not trustless proof of personhood. Each frozen round has exactly one VRF request. A missing answer is never re-requested: competing results would let fulfillment ordering bias winners. Winners pull their prize; trade receipts never push claims. Prizes still unpaid after the claim window return to the existing inference recipient, never to an arbitrary caller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ClausFreeDrawHook.sol\":\"ClausFreeDrawHook\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":solmate/=lib/v4-core/lib/solmate/\"],\"viaIR\":true},\"sources\":{\"src/ClausFreeDrawHook.sol\":{\"keccak256\":\"0x372922b3969e383c3a25eef148805a68c5350514d812aaa31027e309ea2a6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e75e93e1bf969da42d47edfe717323fa8c8cd970a03054596c945d53f07f4b\",\"dweb:/ipfs/QmYQv85YqYBYb98a7KSTkWHNbVPSuoi4T2tUVZWwTAYiji\"]},\"src/IClausTradeProgram.sol\":{\"keccak256\":\"0xea91e1d61152d4e7bb7693429028a3358308eb46857dcffa25275bfcb3f293b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb10700139b9ca8628e798cc93c0eff792c48d1bfac25393e2e2e1d1ce5203e3\",\"dweb:/ipfs/Qmd5hMuHRi6YhxFVC7hWrhmwbndUaZfNx5HkAbpwUAJNHz\"]}},\"version\":1}","userdoc":{"kind":"user","notice":"Free-entry community draws funded by 0.1% of existing collected swap fees. The total trading fee never increases. Swaps and holdings NEVER create entries or improve odds. The collector publishes an ordered free-address list before each VRF request. Admission relies on that collector; this is not trustless proof of personhood. Each frozen round has exactly one VRF request. A missing answer is never re-requested: competing results would let fulfillment ordering bias winners. Winners pull their prize; trade receipts never push claims. Prizes still unpaid after the claim window return to the existing inference recipient, never to an arbitrary caller.","methods":{"claim(uint256)":{"notice":"Anyone may pay a settled winner their outstanding prize."},"claimDeadline()":{"notice":"After this time unpaid prizes may be returned to RECIPIENT and late receipts no longer top up a winner."},"finishSealing()":{"notice":"Only used after the grace period if the operator missed rounds. Never cancels a random request or redirects any assigned winning claim."},"sweepExpired(uint256)":{"notice":"After the claim window, any unpaid prize (unanswered oracle, unclaimed or undeliverable) returns to the existing inference recipient. Inside the window no winner is ever redirected."},"start(bytes32,uint256)":{"notice":"The future start avoids ambiguous pre-start receipts in the same block. Activation must also honor the separate published advance notice."},"seal(uint256,bytes32,uint32,bytes32)":{"notice":"Freeze rounds in order. An empty round carries its available pot forward. Oracle costs come from the caller, never from collected prizes."},"rawFulfillRandomWords(uint256,uint256[])":{"notice":"Only the round's original request can supply its result. Duplicate callbacks and callbacks after expiry settlement are ignored."},"quote(address,bool,int256,uint160,uint128,bytes)":{"notice":"The wrapper adds the existing 0.1% protected compute allocation. Total trading fees stay at 2.3%, before, during and after the campaign."}},"version":1},"devdoc":{"kind":"dev","methods":{},"version":1},"storageLayout":{"types":{"t_bool":{"label":"bool","encoding":"inplace","numberOfBytes":"1"},"t_uint32":{"label":"uint32","encoding":"inplace","numberOfBytes":"4"},"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_bytes32":{"label":"bytes32","encoding":"inplace","numberOfBytes":"32"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_struct(Round)158_storage":{"label":"struct ClausFreeDrawHook.Round","members":[{"slot":"0","type":"t_bytes32","astId":135,"label":"root","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"1","type":"t_bytes32","astId":137,"label":"snapshotHash","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_uint32","astId":139,"label":"entries","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":141,"label":"closed","offset":4,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":143,"label":"randomReady","offset":5,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":145,"label":"settled","offset":6,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_bool","astId":147,"label":"claimed","offset":7,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"3","type":"t_uint256","astId":149,"label":"requestId","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"4","type":"t_uint256","astId":151,"label":"randomWord","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"5","type":"t_address","astId":153,"label":"winner","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"6","type":"t_uint256","astId":155,"label":"prize","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"7","type":"t_uint256","astId":157,"label":"paid","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"}],"encoding":"inplace","numberOfBytes":"256"},"t_mapping(t_uint256,t_bool)":{"key":"t_uint256","label":"mapping(uint256 => bool)","value":"t_bool","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_uint256)":{"key":"t_uint256","label":"mapping(uint256 => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_uint256,t_struct(Round)158_storage)":{"key":"t_uint256","label":"mapping(uint256 => struct ClausFreeDrawHook.Round)","value":"t_struct(Round)158_storage","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_uint256,t_bool))":{"key":"t_address","label":"mapping(address => mapping(uint256 => bool))","value":"t_mapping(t_uint256,t_bool)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_uint256,t_struct(Round)158_storage)","astId":163,"label":"rounds","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"1","type":"t_mapping(t_uint256,t_uint256)","astId":167,"label":"requestedAt","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"2","type":"t_mapping(t_uint256,t_uint256)","astId":171,"label":"_requestRoundPlusOne","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"3","type":"t_mapping(t_address,t_mapping(t_uint256,t_bool))","astId":177,"label":"received","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"4","type":"t_uint256","astId":179,"label":"startedAt","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"5","type":"t_bytes32","astId":181,"label":"announcementHash","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"6","type":"t_uint256","astId":183,"label":"nextRound","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"7","type":"t_uint256","astId":185,"label":"lastEligibleRoundPlusOne","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"8","type":"t_uint256","astId":187,"label":"pendingPot","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"9","type":"t_uint256","astId":189,"label":"prizeAccrued","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"10","type":"t_uint256","astId":191,"label":"prizePaid","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"11","type":"t_uint256","astId":193,"label":"recipientAccrued","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"12","type":"t_uint256","astId":195,"label":"recipientCollected","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"13","type":"t_uint256","astId":197,"label":"collectRetryAfter","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"},{"slot":"14","type":"t_uint256","astId":199,"label":"_payment","offset":0,"contract":"src/ClausFreeDrawHook.sol:ClausFreeDrawHook"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"6080806040523460155761214f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c80630a09284a14611a7b5780630d9019e114611a4d5780631274c3f314611a305780631462783414611a025780631b2df850146119d95780631ca104a9146119bf5780631d073a7a146119915780631fe543e31461195457806328c13a1c1461193657806330e1198b146118f15780633370eb7d146118535780633471fd3e14611836578063379607f51461180057806339018b8e146117595780633ba86c441461173f578063444897ff1461172257806347e405531461170557806349631c17146116e45780635661b7171461151e578063599a949e146115015780635ed73d59146114e5578063676bab0114610f98578063778062a114610f6957806382fadcc214610f3f578063865e0d4814610ef75780638661024b14610edb5780638b3e047614610ebe5780638c65c81f14610e005780638f82543f14610de257806391dd734614610c275780639655647514610c0957806396b24c0014610bee5780639779ea4614610bd057806398bc402d14610b0e5780639f34fc8014610af0578063a06890311461065d578063a6cf7f101461063f578063a779119614610600578063a7b573ca146105e2578063aaac0462146105a3578063b17acdcd146103f0578063ca6015db146103d4578063dc88d0cf146102c3578063e74e607b146102a6578063f11e547d1461025d578063f1e05eb71461023f5763f21f537d1461021f575f80fd5b3461023c578060031936011261023c576020600454604051908152f35b80fd5b503461023c578060031936011261023c576020600d54604051908152f35b503461023c57604036600319011261023c5760209060ff906040906001600160a01b03610288611adc565b16815260038452818120602435825284522054166040519015158152f35b503461023c578060031936011261023c5760206040516103e88152f35b503461023c5760c036600319011261023c576102dd611adc565b506024358015150361023c576064356001600160a01b0381160361023c576084356fffffffffffffffffffffffffffffffff81160361023c5760a43567ffffffffffffffff81116103d057610336903690600401611af2565b505060c090816040516103498282611cda565b36903760405182810181811067ffffffffffffffff8211176103bc576040908152612ee08252610bb860208301526105dc8282015260608201839052610dac60808301526107d060a08301525191825b600682106103a657505050f35b6020806001928551815201930191019091610399565b634e487b7160e01b83526041600452602483fd5b5080fd5b503461023c578060031936011261023c576020604051602a8152f35b503461023c57602036600319011261023c576004358015801561058c575b6104ea5761041a6120f5565b61042681600c54611b44565b600c55600e5461057d576001600e5561048d82604051735a428ea2f282effbf15baa87f1437f8c2f4fd99560208201528360408201526040815261046b606082611cda565b604051809381926348c8949160e01b8352602060048401526024830190611b20565b0381836e04444c5dc75cb358380d2e3de08a905af18015610572576104f9575b506002600e54036104ea5760207f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f9183600e55604051908152a180f35b63b4fa3fb360e01b8252600482fd5b823d8082843e6105098184611cda565b8201916020818403126103d05780519067ffffffffffffffff821161056e570182601f820112156103d057805161053f81611d28565b9361054d6040519586611cda565b8185526020828401011161056e578060208093018386015e830101526104ad565b8280fd5b6040513d85823e3d90fd5b634a44555360e11b8252600482fd5b5061059c600b54600c5490611b84565b811161040e565b503461023c578060031936011261023c576105bc611b64565b4211156105d357602a6006556105d0612002565b80f35b634a44555360e11b8152600490fd5b503461023c578060031936011261023c576020600b54604051908152f35b503461023c57606036600319011261023c57604435906001600160a01b038216820361023c57602061063783602435600435611dd3565b604051908152f35b503461023c578060031936011261023c576020600c54604051908152f35b50608036600319011261023c5760043560243560443563ffffffff8116809103610aec57606435738aca8890d34086d7a30b9c06fae25e0c3cda4cfa3303610ade576006548414801590610acd575b8015610abd575b610aae5780158015610aa2575b610a935783855284602052604085209060028201805460ff8160201c16610a705785845564ffffffffff1916841764010000000017815560018084018390558601808711610a7f578060065584155f146107a7575034610798579160a093917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e359593600160301b66ff000000000000198254161790555b602a6006541461078b575b60066003830154920154926040519485526020850152604084015260608301526080820152a280f35b610793612002565b610762565b63b4fa3fb360e01b8752600487fd5b90506107b16120f5565b8060075560085460068401558660085560038301908154610a70576040516313c34b7f60e01b8152620186a0600482015260016024820152916020836044817302aae1a04f9828517b3007f83f6181900cad910c5afa928315610a65578993610a31575b50823410610a22579061088291602060405163125fa26760e31b828201526001602482015260248152610849604482611cda565b60405180958192634e7e02c760e11b8352620186a060048401526003602484015260016044840152608060648401526084830190611b20565b0381877302aae1a04f9828517b3007f83f6181900cad910c5af1928315610a17578a936109df575b50821580156109ca575b6109bb5790828a94939255888452600160205242604085205581845260026020526040842055877fe09cad433de20c7c5706a5b423836068ff0ebf2ce5e2466fd10dd811aa85f4746020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152a380341161094f575b5050917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e35939160a093610757565b818061095c819334611b84565b738aca8890d34086d7a30b9c06fae25e0c3cda4cfa5af13d156109b6573d61098381611d28565b906109916040519283611cda565b81528760203d92013e5b156109a757855f610921565b63b4fa3fb360e01b8652600486fd5b61099b565b63b4fa3fb360e01b8a5260048afd5b50828a52600260205260408a205415156108b4565b9092506020813d602011610a0f575b816109fb60209383611cda565b81010312610a0b5751915f6108aa565b5f80fd5b3d91506109ee565b6040513d8c823e3d90fd5b63b4fa3fb360e01b8952600489fd5b9092506020813d602011610a5d575b81610a4d60209383611cda565b81010312610a0b5751915f610815565b3d9150610a40565b6040513d8b823e3d90fd5b630bdb902160e41b8852600488fd5b634e487b7160e01b88526011600452602488fd5b63b4fa3fb360e01b8552600485fd5b508215821514156106c0565b634a44555360e11b8552600485fd5b50610ac6611b64565b42116106b3565b50610ad784611c92565b42106106ac565b6282b42960e81b8552600485fd5b8380fd5b503461023c578060031936011261023c57602060405162278d008152f35b503461023c57602036600319011261023c57600435610b2b611d10565b42111561057d5780825281602052604082206006810154906007810191610b53835482611b84565b928315610bc15755600201805466ff0000000000001916600160301b1790556009547f8b15a0b729ab84887af301417db9dd9744f4247286bbe82ff3bf3fcb6d785e0991602091610ba5908290611b84565b600955610bb481600b54611b44565b600b55604051908152a280f35b630bdb902160e41b8652600486fd5b503461023c578060031936011261023c576020604051620186a08152f35b503461023c578060031936011261023c576020610637611d63565b503461023c578060031936011261023c57602060405162093a808152f35b503461023c57602036600319011261023c5760043567ffffffffffffffff81116103d057610c59903690600401611af2565b6e04444c5dc75cb358380d2e3de08a903314801590610dd5575b8015610dca575b610dbc5781604091810103126103d05780356001600160a01b038116919082900361056e57602001356002600e556e04444c5dc75cb358380d2e3de08a903b1561056e5782604051637a94c56560e11b81523060048201528160248201528260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610da7575b50506e04444c5dc75cb358380d2e3de08a903b1561056e5760405191630b0d9c0960e01b8352836004840152602483015260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610d87575b610d838260405190610d6d602083611cda565b8152604051918291602083526020830190611b20565b0390f35b610d92828092611cda565b61023c575f610d5a565b6040513d84823e3d90fd5b81610db191611cda565b61056e57825f610d01565b6282b42960e81b8352600483fd5b506040811415610c7a565b506001600e541415610c73565b503461023c578060031936011261023c576020600854604051908152f35b503461023c57602036600319011261023c57604061018091600435815280602052208054906001810154906002810154600382015460048301549060ff60018060a01b03600586015416936007600687015496015496604051988952602089015263ffffffff81166040890152818160201c1615156060890152818160281c1615156080890152818160301c16151560a089015260381c16151560c087015260e0860152610100850152610120840152610140830152610160820152f35b503461023c578060031936011261023c5760206040516138408152f35b503461023c578060031936011261023c57602060405160018152f35b503461023c578060031936011261023c5760c060045460065460085460075460095491600a5493604051958652602086015260408501526060840152608083015260a0820152f35b503461023c57602036600319011261023c5760406020916004358152600183522054604051908152f35b503461023c578060031936011261023c5760206040517302aae1a04f9828517b3007f83f6181900cad910c8152f35b5034610a0b5736600319016101808112610a0b5761016013610a0b576101643567ffffffffffffffff8111610a0b57610fd5903690600401611af2565b9060405163040dda0f60e01b815230600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f916114a3575b506001600160a01b03163314801590611417575b611409576024356001600160a01b03811690819003610a0b573314918215926113e5575b821561139e575b50508015611392575b6112d257611068611d44565b8061137f575b801561135c575b6112d257611081611d44565b1561134b5761108e611d53565b600f0b600160ff1b8114611303576110ab9060c435905f03611b44565b905b600454801515908161133d575b508061132a575b15611324576103e860c435045b60e43592838211908115611317575b81156112e1575b506112d2576110f1611d63565b6111218461111c61111361110a600b54600c5490611b84565b60095490611b44565b600a5490611b84565b611b44565b116112c357335f52600360205260405f209061116261115a82600435968795865f5260205260405f20600160ff19825416179055611b84565b600b54611b44565b600b5561117181600954611b44565b60095561118081600854611b44565b60085580611291575b5050602a60065414611284575b6111a5600b54600c5490611b84565b90662386f26fc1000082101580611278575b6111ce575b60405163676bab0160e01b8152602090f35b303b15610a0b5760405163b17acdcd60e01b8152600481018390525f816024818330620249f0f19081611263575b5061125b57610e1042019081421161124757507fff7e1fe0c585e56c3169651fd1510e02bd4c92bfde2886b1d4bbb64a6795071b91602091600d55604051908152a25b5f80806111bc565b634e487b7160e01b81526011600452602490fd5b50505061123f565b6112709192505f90611cda565b5f905f6111fc565b50600d544210156111b7565b61128c612002565b611196565b60207faf87dee8e5fc8fe28a934a5511071c36c94b4fe63a8c4fc1c5e737e8ebef435a91604051908152a2815f611189565b6340db7f8760e01b5f5260045ffd5b63b4fa3fb360e01b5f5260045ffd5b6107d08082029250811591830414171561130357620f4240900483105f6110e4565b634e487b7160e01b5f52601160045260245ffd5b90508360c43510906110dd565b5f6110ce565b50611333611b51565b61012435106110c1565b90506101243510155f6110ba565b611353611d53565b600f0b906110ad565b50611365611d44565b15801561107557505f611376611d53565b600f0b12611075565b505f611389611d53565b600f0b1361106e565b5042610124351161105c565b9091506113aa81611d28565b906113b86040519283611cda565b80825260208201923682820111610a0b57815f926020928637830101525190206101443514155f80611053565b9150335f52600360205260405f206004355f5260205260ff60405f2054169161104c565b6282b42960e81b5f5260045ffd5b5060405163218d105760e11b815233600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f9161145d575b5015611028565b90506020813d602011611490575b8161147860209383611cda565b81010312610a0b57518015158103610a0b575f611456565b3d915061146b565b6040513d5f823e3d90fd5b90506020813d6020116114dd575b816114be60209383611cda565b81010312610a0b57516001600160a01b0381168103610a0b575f611014565b3d91506114b1565b34610a0b575f366003190112610a0b576020604051610e108152f35b34610a0b575f366003190112610a0b576020600754604051908152f35b34610a0b576060366003190112610a0b5760043561153a611ac6565b60443567ffffffffffffffff8111610a0b5761155a903690600401611a95565b9190611564611d10565b42116116c757835f525f60205260405f206002810180549360ff8560281c161580156116d6575b6116c75760ff8560301c166116b8576001600160a01b03811680156112d257600484015463ffffffff871680156116a4576115c9910692838a611dd3565b955f965b8888101561163b576001908860051b8801358082105f14611613576040519060208201928352604082015260408152611607606082611cda565b5190205b9701966115cd565b906040519060208201928352604082015260408152611633606082611cda565b51902061160b565b8996508554036112d2577f782732c32ed29ecd5b56192acdf24a69cdc255996ccb806866caf1d05eca970294604094600160301b60059366ff000000000000191617905501816bffffffffffffffffffffffff60a01b82541617905582519182526020820152a2005b634e487b7160e01b5f52601260045260245ffd5b630bdb902160e41b5f5260045ffd5b634a44555360e11b5f5260045ffd5b5063ffffffff85161561158b565b34610a0b575f366003190112610a0b576020604051662386f26fc100008152f35b34610a0b575f366003190112610a0b576020600654604051908152f35b34610a0b575f366003190112610a0b576020600a54604051908152f35b34610a0b575f366003190112610a0b576020610637611d10565b34610a0b576040366003190112610a0b57602435600435738aca8890d34086d7a30b9c06fae25e0c3cda4cf9193301611409576004546116b857801580156117f6575b80156117e1575b6112d257816040917fda99f424f4b343b171a6bab0571655e865e7366818c5c87fd9118dbc731a98a9936004558060055582519182526020820152a1005b5062093a8042018042116113035782116117a3565b504282111561179c565b34610a0b576020366003190112610a0b57611834600435805f525f60205260018060a01b03600560405f2001541690611e2e565b005b34610a0b575f366003190112610a0b576020600954604051908152f35b34610a0b576020366003190112610a0b5760405163e1cab74560e01b8152620186a060048201526001602482015260043560448201526020816064817302aae1a04f9828517b3007f83f6181900cad910c5afa8015611498575f906118be575b602090604051908152f35b506020813d6020116118e9575b816118d860209383611cda565b81010312610a0b57602090516118b3565b3d91506118cb565b34610a0b576040366003190112610a0b5760043561190d611ac6565b5f828152602081905260409020600501546001600160a01b031633036114095761183491611e2e565b34610a0b576020366003190112610a0b576020610637600435611c92565b34610a0b576040366003190112610a0b5760243567ffffffffffffffff8111610a0b57611988611834913690600401611a95565b90600435611b91565b34610a0b575f366003190112610a0b576020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152f35b34610a0b575f366003190112610a0b576020610637611b64565b34610a0b575f366003190112610a0b5760206040516e04444c5dc75cb358380d2e3de08a908152f35b34610a0b575f366003190112610a0b57602060405173180eae784dee739fbab432b06f78bf9a98aae3348152f35b34610a0b575f366003190112610a0b576020600554604051908152f35b34610a0b575f366003190112610a0b576020604051735a428ea2f282effbf15baa87f1437f8c2f4fd9958152f35b34610a0b575f366003190112610a0b576020610637611b51565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b576020808501948460051b010111610a0b57565b602435906001600160a01b0382168203610a0b57565b600435906001600160a01b0382168203610a0b57565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b5760208381860195010111610a0b57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9190820180921161130357565b60045462093a8081018091116113035790565b600454156116c757611b74611b51565b62093a8081018091116113035790565b9190820391821161130357565b91907302aae1a04f9828517b3007f83f6181900cad910c330361140957825f52600260205260405f20549182158015611c87575b611c81575f19830192831161130357825f525f60205260405f209060038201548514801590611c70575b8015611c5f575b611c585715611c445790356004820155600201805465ff00000000001916650100000000001790557f4235fc540c899ae91eade70d636591126a477a30a8dc25ae4489f396de2a51035f80a3565b634e487b7160e01b5f52603260045260245ffd5b5050505050565b5060ff600283015460301c16611bf6565b5060ff600283015460281c16611bef565b50505050565b506001811415611bc5565b6004549081158015611ccf575b6112d2576001810180911161130357613840810290808204613840149015171561130357611ccc91611b44565b90565b50602a811015611c9f565b90601f8019910116810190811067ffffffffffffffff821117611cfc57604052565b634e487b7160e01b5f52604160045260245ffd5b611d18611b64565b62278d0081018091116113035790565b67ffffffffffffffff8111611cfc57601f01601f191660200190565b6064358015158103610a0b5790565b60843580600f0b8103610a0b5790565b604051627eeac760e11b81523060048201525f60248201526020816044816e04444c5dc75cb358380d2e3de08a905afa908115611498575f91611da4575090565b90506020813d602011611dcb575b81611dbf60209383611cda565b81010312610a0b575190565b3d9150611db2565b916040519160208301934685523060408501526060840152608083015260018060a01b031660a082015260a08152611e0c60c082611cda565b5190206040516020810191825260208152611e28604082611cda565b51902090565b611e36611d10565b42116116c757805f525f60205260405f206002810180549060ff8260301c16158015611fed575b8015611fdc575b6116c7576006830154916007840190611e7e825485611b84565b9384156116b85767010000000000000092611e976120f5565b5567ff000000000000001916179055611eb281600a54611b44565b600a55600e546116c7576001600e55604080516001600160a01b0386166020820152808201839052908152611eee905f9061046b606082611cda565b0381836e04444c5dc75cb358380d2e3de08a905af1801561149857611f65575b506002600e54036112d2575f600e5560059190910154604080516001600160a01b03958616815260208101939093529316927f5eab6cc13df174a3d427c8f1bbb105e9f5ac31770edd88092331527d9c8fdd6591a3565b3d805f833e611f748183611cda565b810190602081830312610a0b5780519067ffffffffffffffff8211610a0b570181601f82011215610a0b57805190611fab82611d28565b92611fb96040519485611cda565b82845260208383010111610a0b57815f9260208093018386015e83010152611f0e565b506001600160a01b03851615611e64565b5060058301546001600160a01b031615611e5d565b60085480156120f2575f6008556007541515806120e1575b15612096576007545f198101908111611303575f525f602052600260405f2060068101612048848254611b44565b905501805467ff00000000000000191690556007545f198101919082116113035760207fc783854938299dc57460deb40a0fa35b35f08f154d7b2b0ef262bfaa12527cca91604051908152a2565b6020816120c67f3e0eacaa869e03ca54b3ff68315fe703b02a91c5cff5a032eeb830aa0e8a57b093600954611b84565b6009556120d581600b54611b44565b600b55604051908152a1565b506120ea611d10565b42111561201a565b50565b6120fd611d63565b61211261111361110a600b54600c5490611b84565b116112c35756fea264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","sourceMap":"1599:14748:0:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"60806040526004361015610011575f80fd5b5f803560e01c80630a09284a14611a7b5780630d9019e114611a4d5780631274c3f314611a305780631462783414611a025780631b2df850146119d95780631ca104a9146119bf5780631d073a7a146119915780631fe543e31461195457806328c13a1c1461193657806330e1198b146118f15780633370eb7d146118535780633471fd3e14611836578063379607f51461180057806339018b8e146117595780633ba86c441461173f578063444897ff1461172257806347e405531461170557806349631c17146116e45780635661b7171461151e578063599a949e146115015780635ed73d59146114e5578063676bab0114610f98578063778062a114610f6957806382fadcc214610f3f578063865e0d4814610ef75780638661024b14610edb5780638b3e047614610ebe5780638c65c81f14610e005780638f82543f14610de257806391dd734614610c275780639655647514610c0957806396b24c0014610bee5780639779ea4614610bd057806398bc402d14610b0e5780639f34fc8014610af0578063a06890311461065d578063a6cf7f101461063f578063a779119614610600578063a7b573ca146105e2578063aaac0462146105a3578063b17acdcd146103f0578063ca6015db146103d4578063dc88d0cf146102c3578063e74e607b146102a6578063f11e547d1461025d578063f1e05eb71461023f5763f21f537d1461021f575f80fd5b3461023c578060031936011261023c576020600454604051908152f35b80fd5b503461023c578060031936011261023c576020600d54604051908152f35b503461023c57604036600319011261023c5760209060ff906040906001600160a01b03610288611adc565b16815260038452818120602435825284522054166040519015158152f35b503461023c578060031936011261023c5760206040516103e88152f35b503461023c5760c036600319011261023c576102dd611adc565b506024358015150361023c576064356001600160a01b0381160361023c576084356fffffffffffffffffffffffffffffffff81160361023c5760a43567ffffffffffffffff81116103d057610336903690600401611af2565b505060c090816040516103498282611cda565b36903760405182810181811067ffffffffffffffff8211176103bc576040908152612ee08252610bb860208301526105dc8282015260608201839052610dac60808301526107d060a08301525191825b600682106103a657505050f35b6020806001928551815201930191019091610399565b634e487b7160e01b83526041600452602483fd5b5080fd5b503461023c578060031936011261023c576020604051602a8152f35b503461023c57602036600319011261023c576004358015801561058c575b6104ea5761041a6120f5565b61042681600c54611b44565b600c55600e5461057d576001600e5561048d82604051735a428ea2f282effbf15baa87f1437f8c2f4fd99560208201528360408201526040815261046b606082611cda565b604051809381926348c8949160e01b8352602060048401526024830190611b20565b0381836e04444c5dc75cb358380d2e3de08a905af18015610572576104f9575b506002600e54036104ea5760207f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f9183600e55604051908152a180f35b63b4fa3fb360e01b8252600482fd5b823d8082843e6105098184611cda565b8201916020818403126103d05780519067ffffffffffffffff821161056e570182601f820112156103d057805161053f81611d28565b9361054d6040519586611cda565b8185526020828401011161056e578060208093018386015e830101526104ad565b8280fd5b6040513d85823e3d90fd5b634a44555360e11b8252600482fd5b5061059c600b54600c5490611b84565b811161040e565b503461023c578060031936011261023c576105bc611b64565b4211156105d357602a6006556105d0612002565b80f35b634a44555360e11b8152600490fd5b503461023c578060031936011261023c576020600b54604051908152f35b503461023c57606036600319011261023c57604435906001600160a01b038216820361023c57602061063783602435600435611dd3565b604051908152f35b503461023c578060031936011261023c576020600c54604051908152f35b50608036600319011261023c5760043560243560443563ffffffff8116809103610aec57606435738aca8890d34086d7a30b9c06fae25e0c3cda4cfa3303610ade576006548414801590610acd575b8015610abd575b610aae5780158015610aa2575b610a935783855284602052604085209060028201805460ff8160201c16610a705785845564ffffffffff1916841764010000000017815560018084018390558601808711610a7f578060065584155f146107a7575034610798579160a093917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e359593600160301b66ff000000000000198254161790555b602a6006541461078b575b60066003830154920154926040519485526020850152604084015260608301526080820152a280f35b610793612002565b610762565b63b4fa3fb360e01b8752600487fd5b90506107b16120f5565b8060075560085460068401558660085560038301908154610a70576040516313c34b7f60e01b8152620186a0600482015260016024820152916020836044817302aae1a04f9828517b3007f83f6181900cad910c5afa928315610a65578993610a31575b50823410610a22579061088291602060405163125fa26760e31b828201526001602482015260248152610849604482611cda565b60405180958192634e7e02c760e11b8352620186a060048401526003602484015260016044840152608060648401526084830190611b20565b0381877302aae1a04f9828517b3007f83f6181900cad910c5af1928315610a17578a936109df575b50821580156109ca575b6109bb5790828a94939255888452600160205242604085205581845260026020526040842055877fe09cad433de20c7c5706a5b423836068ff0ebf2ce5e2466fd10dd811aa85f4746020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152a380341161094f575b5050917f0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e35939160a093610757565b818061095c819334611b84565b738aca8890d34086d7a30b9c06fae25e0c3cda4cfa5af13d156109b6573d61098381611d28565b906109916040519283611cda565b81528760203d92013e5b156109a757855f610921565b63b4fa3fb360e01b8652600486fd5b61099b565b63b4fa3fb360e01b8a5260048afd5b50828a52600260205260408a205415156108b4565b9092506020813d602011610a0f575b816109fb60209383611cda565b81010312610a0b5751915f6108aa565b5f80fd5b3d91506109ee565b6040513d8c823e3d90fd5b63b4fa3fb360e01b8952600489fd5b9092506020813d602011610a5d575b81610a4d60209383611cda565b81010312610a0b5751915f610815565b3d9150610a40565b6040513d8b823e3d90fd5b630bdb902160e41b8852600488fd5b634e487b7160e01b88526011600452602488fd5b63b4fa3fb360e01b8552600485fd5b508215821514156106c0565b634a44555360e11b8552600485fd5b50610ac6611b64565b42116106b3565b50610ad784611c92565b42106106ac565b6282b42960e81b8552600485fd5b8380fd5b503461023c578060031936011261023c57602060405162278d008152f35b503461023c57602036600319011261023c57600435610b2b611d10565b42111561057d5780825281602052604082206006810154906007810191610b53835482611b84565b928315610bc15755600201805466ff0000000000001916600160301b1790556009547f8b15a0b729ab84887af301417db9dd9744f4247286bbe82ff3bf3fcb6d785e0991602091610ba5908290611b84565b600955610bb481600b54611b44565b600b55604051908152a280f35b630bdb902160e41b8652600486fd5b503461023c578060031936011261023c576020604051620186a08152f35b503461023c578060031936011261023c576020610637611d63565b503461023c578060031936011261023c57602060405162093a808152f35b503461023c57602036600319011261023c5760043567ffffffffffffffff81116103d057610c59903690600401611af2565b6e04444c5dc75cb358380d2e3de08a903314801590610dd5575b8015610dca575b610dbc5781604091810103126103d05780356001600160a01b038116919082900361056e57602001356002600e556e04444c5dc75cb358380d2e3de08a903b1561056e5782604051637a94c56560e11b81523060048201528160248201528260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610da7575b50506e04444c5dc75cb358380d2e3de08a903b1561056e5760405191630b0d9c0960e01b8352836004840152602483015260448201528181606481836e04444c5dc75cb358380d2e3de08a905af18015610d9c57610d87575b610d838260405190610d6d602083611cda565b8152604051918291602083526020830190611b20565b0390f35b610d92828092611cda565b61023c575f610d5a565b6040513d84823e3d90fd5b81610db191611cda565b61056e57825f610d01565b6282b42960e81b8352600483fd5b506040811415610c7a565b506001600e541415610c73565b503461023c578060031936011261023c576020600854604051908152f35b503461023c57602036600319011261023c57604061018091600435815280602052208054906001810154906002810154600382015460048301549060ff60018060a01b03600586015416936007600687015496015496604051988952602089015263ffffffff81166040890152818160201c1615156060890152818160281c1615156080890152818160301c16151560a089015260381c16151560c087015260e0860152610100850152610120840152610140830152610160820152f35b503461023c578060031936011261023c5760206040516138408152f35b503461023c578060031936011261023c57602060405160018152f35b503461023c578060031936011261023c5760c060045460065460085460075460095491600a5493604051958652602086015260408501526060840152608083015260a0820152f35b503461023c57602036600319011261023c5760406020916004358152600183522054604051908152f35b503461023c578060031936011261023c5760206040517302aae1a04f9828517b3007f83f6181900cad910c8152f35b5034610a0b5736600319016101808112610a0b5761016013610a0b576101643567ffffffffffffffff8111610a0b57610fd5903690600401611af2565b9060405163040dda0f60e01b815230600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f916114a3575b506001600160a01b03163314801590611417575b611409576024356001600160a01b03811690819003610a0b573314918215926113e5575b821561139e575b50508015611392575b6112d257611068611d44565b8061137f575b801561135c575b6112d257611081611d44565b1561134b5761108e611d53565b600f0b600160ff1b8114611303576110ab9060c435905f03611b44565b905b600454801515908161133d575b508061132a575b15611324576103e860c435045b60e43592838211908115611317575b81156112e1575b506112d2576110f1611d63565b6111218461111c61111361110a600b54600c5490611b84565b60095490611b44565b600a5490611b84565b611b44565b116112c357335f52600360205260405f209061116261115a82600435968795865f5260205260405f20600160ff19825416179055611b84565b600b54611b44565b600b5561117181600954611b44565b60095561118081600854611b44565b60085580611291575b5050602a60065414611284575b6111a5600b54600c5490611b84565b90662386f26fc1000082101580611278575b6111ce575b60405163676bab0160e01b8152602090f35b303b15610a0b5760405163b17acdcd60e01b8152600481018390525f816024818330620249f0f19081611263575b5061125b57610e1042019081421161124757507fff7e1fe0c585e56c3169651fd1510e02bd4c92bfde2886b1d4bbb64a6795071b91602091600d55604051908152a25b5f80806111bc565b634e487b7160e01b81526011600452602490fd5b50505061123f565b6112709192505f90611cda565b5f905f6111fc565b50600d544210156111b7565b61128c612002565b611196565b60207faf87dee8e5fc8fe28a934a5511071c36c94b4fe63a8c4fc1c5e737e8ebef435a91604051908152a2815f611189565b6340db7f8760e01b5f5260045ffd5b63b4fa3fb360e01b5f5260045ffd5b6107d08082029250811591830414171561130357620f4240900483105f6110e4565b634e487b7160e01b5f52601160045260245ffd5b90508360c43510906110dd565b5f6110ce565b50611333611b51565b61012435106110c1565b90506101243510155f6110ba565b611353611d53565b600f0b906110ad565b50611365611d44565b15801561107557505f611376611d53565b600f0b12611075565b505f611389611d53565b600f0b1361106e565b5042610124351161105c565b9091506113aa81611d28565b906113b86040519283611cda565b80825260208201923682820111610a0b57815f926020928637830101525190206101443514155f80611053565b9150335f52600360205260405f206004355f5260205260ff60405f2054169161104c565b6282b42960e81b5f5260045ffd5b5060405163218d105760e11b815233600482015260208160248173180eae784dee739fbab432b06f78bf9a98aae3345afa908115611498575f9161145d575b5015611028565b90506020813d602011611490575b8161147860209383611cda565b81010312610a0b57518015158103610a0b575f611456565b3d915061146b565b6040513d5f823e3d90fd5b90506020813d6020116114dd575b816114be60209383611cda565b81010312610a0b57516001600160a01b0381168103610a0b575f611014565b3d91506114b1565b34610a0b575f366003190112610a0b576020604051610e108152f35b34610a0b575f366003190112610a0b576020600754604051908152f35b34610a0b576060366003190112610a0b5760043561153a611ac6565b60443567ffffffffffffffff8111610a0b5761155a903690600401611a95565b9190611564611d10565b42116116c757835f525f60205260405f206002810180549360ff8560281c161580156116d6575b6116c75760ff8560301c166116b8576001600160a01b03811680156112d257600484015463ffffffff871680156116a4576115c9910692838a611dd3565b955f965b8888101561163b576001908860051b8801358082105f14611613576040519060208201928352604082015260408152611607606082611cda565b5190205b9701966115cd565b906040519060208201928352604082015260408152611633606082611cda565b51902061160b565b8996508554036112d2577f782732c32ed29ecd5b56192acdf24a69cdc255996ccb806866caf1d05eca970294604094600160301b60059366ff000000000000191617905501816bffffffffffffffffffffffff60a01b82541617905582519182526020820152a2005b634e487b7160e01b5f52601260045260245ffd5b630bdb902160e41b5f5260045ffd5b634a44555360e11b5f5260045ffd5b5063ffffffff85161561158b565b34610a0b575f366003190112610a0b576020604051662386f26fc100008152f35b34610a0b575f366003190112610a0b576020600654604051908152f35b34610a0b575f366003190112610a0b576020600a54604051908152f35b34610a0b575f366003190112610a0b576020610637611d10565b34610a0b576040366003190112610a0b57602435600435738aca8890d34086d7a30b9c06fae25e0c3cda4cf9193301611409576004546116b857801580156117f6575b80156117e1575b6112d257816040917fda99f424f4b343b171a6bab0571655e865e7366818c5c87fd9118dbc731a98a9936004558060055582519182526020820152a1005b5062093a8042018042116113035782116117a3565b504282111561179c565b34610a0b576020366003190112610a0b57611834600435805f525f60205260018060a01b03600560405f2001541690611e2e565b005b34610a0b575f366003190112610a0b576020600954604051908152f35b34610a0b576020366003190112610a0b5760405163e1cab74560e01b8152620186a060048201526001602482015260043560448201526020816064817302aae1a04f9828517b3007f83f6181900cad910c5afa8015611498575f906118be575b602090604051908152f35b506020813d6020116118e9575b816118d860209383611cda565b81010312610a0b57602090516118b3565b3d91506118cb565b34610a0b576040366003190112610a0b5760043561190d611ac6565b5f828152602081905260409020600501546001600160a01b031633036114095761183491611e2e565b34610a0b576020366003190112610a0b576020610637600435611c92565b34610a0b576040366003190112610a0b5760243567ffffffffffffffff8111610a0b57611988611834913690600401611a95565b90600435611b91565b34610a0b575f366003190112610a0b576020604051738aca8890d34086d7a30b9c06fae25e0c3cda4cfa8152f35b34610a0b575f366003190112610a0b576020610637611b64565b34610a0b575f366003190112610a0b5760206040516e04444c5dc75cb358380d2e3de08a908152f35b34610a0b575f366003190112610a0b57602060405173180eae784dee739fbab432b06f78bf9a98aae3348152f35b34610a0b575f366003190112610a0b576020600554604051908152f35b34610a0b575f366003190112610a0b576020604051735a428ea2f282effbf15baa87f1437f8c2f4fd9958152f35b34610a0b575f366003190112610a0b576020610637611b51565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b576020808501948460051b010111610a0b57565b602435906001600160a01b0382168203610a0b57565b600435906001600160a01b0382168203610a0b57565b9181601f84011215610a0b5782359167ffffffffffffffff8311610a0b5760208381860195010111610a0b57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9190820180921161130357565b60045462093a8081018091116113035790565b600454156116c757611b74611b51565b62093a8081018091116113035790565b9190820391821161130357565b91907302aae1a04f9828517b3007f83f6181900cad910c330361140957825f52600260205260405f20549182158015611c87575b611c81575f19830192831161130357825f525f60205260405f209060038201548514801590611c70575b8015611c5f575b611c585715611c445790356004820155600201805465ff00000000001916650100000000001790557f4235fc540c899ae91eade70d636591126a477a30a8dc25ae4489f396de2a51035f80a3565b634e487b7160e01b5f52603260045260245ffd5b5050505050565b5060ff600283015460301c16611bf6565b5060ff600283015460281c16611bef565b50505050565b506001811415611bc5565b6004549081158015611ccf575b6112d2576001810180911161130357613840810290808204613840149015171561130357611ccc91611b44565b90565b50602a811015611c9f565b90601f8019910116810190811067ffffffffffffffff821117611cfc57604052565b634e487b7160e01b5f52604160045260245ffd5b611d18611b64565b62278d0081018091116113035790565b67ffffffffffffffff8111611cfc57601f01601f191660200190565b6064358015158103610a0b5790565b60843580600f0b8103610a0b5790565b604051627eeac760e11b81523060048201525f60248201526020816044816e04444c5dc75cb358380d2e3de08a905afa908115611498575f91611da4575090565b90506020813d602011611dcb575b81611dbf60209383611cda565b81010312610a0b575190565b3d9150611db2565b916040519160208301934685523060408501526060840152608083015260018060a01b031660a082015260a08152611e0c60c082611cda565b5190206040516020810191825260208152611e28604082611cda565b51902090565b611e36611d10565b42116116c757805f525f60205260405f206002810180549060ff8260301c16158015611fed575b8015611fdc575b6116c7576006830154916007840190611e7e825485611b84565b9384156116b85767010000000000000092611e976120f5565b5567ff000000000000001916179055611eb281600a54611b44565b600a55600e546116c7576001600e55604080516001600160a01b0386166020820152808201839052908152611eee905f9061046b606082611cda565b0381836e04444c5dc75cb358380d2e3de08a905af1801561149857611f65575b506002600e54036112d2575f600e5560059190910154604080516001600160a01b03958616815260208101939093529316927f5eab6cc13df174a3d427c8f1bbb105e9f5ac31770edd88092331527d9c8fdd6591a3565b3d805f833e611f748183611cda565b810190602081830312610a0b5780519067ffffffffffffffff8211610a0b570181601f82011215610a0b57805190611fab82611d28565b92611fb96040519485611cda565b82845260208383010111610a0b57815f9260208093018386015e83010152611f0e565b506001600160a01b03851615611e64565b5060058301546001600160a01b031615611e5d565b60085480156120f2575f6008556007541515806120e1575b15612096576007545f198101908111611303575f525f602052600260405f2060068101612048848254611b44565b905501805467ff00000000000000191690556007545f198101919082116113035760207fc783854938299dc57460deb40a0fa35b35f08f154d7b2b0ef262bfaa12527cca91604051908152a2565b6020816120c67f3e0eacaa869e03ca54b3ff68315fe703b02a91c5cff5a032eeb830aa0e8a57b093600954611b84565b6009556120d581600b54611b44565b600b55604051908152a1565b506120ea611d10565b42111561201a565b50565b6120fd611d63565b61211261111361110a600b54600c5490611b84565b116112c35756fea264697066735822122035a300f292af02b35e1753c821bd552c09bf0a0c187bd3304b777a619f1a4f5664736f6c634300081a0033","sourceMap":"1599:14748:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3387:32;1599:14748;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;-1:-1:-1;;;;;1599:14748:0;;:::i;:::-;;;;3009:60;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2107:5;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;12861:6;1599:14748;;12870:5;1599:14748;12852:48;;1599:14748;12877:5;12852:48;;;1599:14748;;12852:48;;1599:14748;;;12887:5;1599:14748;12852:48;;1599:14748;12894:5;1599:14748;12852:48;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1599:14748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2209:2;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;15445:11;;:59;;;;1599:14748;15441:86;;;;:::i;:::-;15562:28;1599:14748;15562:28;1599:14748;15562:28;:::i;:::-;;1599:14748;15733:8;1599:14748;15729:36;;15786:1;15733:8;1599:14748;;;;;1847:42;1599:14748;15826:21;;1599:14748;;;;;;;15826:21;;;;;;:::i;:::-;1599:14748;;;;;;;;;15797:51;;1599:14748;;15797:51;;1599:14748;;;;;;:::i;:::-;15797:51;;;1763:42;15797:51;;;;;;;;1599:14748;;15874:1;15733:8;1599:14748;15862:13;15858:40;;1599:14748;15637:21;1599:14748;;15733:8;1599:14748;;;;;;15637:21;1599:14748;;15858:40;-1:-1:-1;;;15884:14:0;;1599:14748;4981:14;15884;15797:51;;;;;;;;;;;:::i;:::-;;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15797:51;;1599:14748;;;;15797:51;1599:14748;;;;;;;;;15729:36;-1:-1:-1;;;15755:10:0;;1599:14748;9288:10;15755;15445:59;1599:14748;15469:35;:16;1599:14748;15486:18;1599:14748;15469:35;;:::i;:::-;15460:44;;15445:59;;1599:14748;;;;;;;;;;;;;11729:14;;:::i;:::-;11710:15;:33;;11706:56;;2209:2;11772:23;1599:14748;11772:23;;:::i;:::-;1599:14748;;11706:56;-1:-1:-1;;;11752:10:0;;1599:14748;;11752:10;1599:14748;;;;;;;;;;;;;;3311:31;1599:14748;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3348:33;1599:14748;;;;;;;;-1:-1:-1;1599:14748:0;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;;;1929:42;4525:10;:21;4521:48;;6525:9;1599:14748;6520:14;;;;:47;;;1599:14748;6520:83;;;;1599:14748;6516:106;;6636:26;;:66;;;;1599:14748;6632:93;;1599:14748;;;;;;;;;6780:12;;;;1599:14748;;;;;;;6776:38;;1599:14748;;;-1:-1:-1;;1599:14748:0;;;;;;;;6911:18;;;1599:14748;;;;;;;;;;;6525:9;1599:14748;6985:10;;6981:321;1599:14748;;;7015:9;;7011:41;;1599:14748;;;;7373:71;1599:14748;;-1:-1:-1;;;1599:14748:0;;;;;;;;6981:321;2209:2;6525:9;1599:14748;7315:24;7311:47;;6981:321;6525:9;7415:15;;;1599:14748;7432:11;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;7373:71;1599:14748;;7311:47;;;:::i;:::-;;;7011:41;-1:-1:-1;;;7038:14:0;;1599:14748;4981:14;7038;6981:321;;;;;:::i;:::-;1599:14748;7146:32;1599:14748;7206:10;1599:14748;6525:9;7192:11;;1599:14748;;7206:10;1599:14748;7550:15;;;1599:14748;;;7546:46;;1599:14748;;-1:-1:-1;;;7662:48:0;;2471:7;1599:14748;7662:48;;1599:14748;;;;;;;;;;;2015:42;7662:48;;;;;;;;;;;6981:321;7724:9;;;:15;7720:42;;1599:14748;;;;;;;;;7847:66;;;;1599:14748;;7847:66;;1599:14748;;7847:66;;;1599:14748;7847:66;;:::i;:::-;1599:14748;;;;;;;;;7785:129;;2471:7;1599:14748;7785:129;;1599:14748;7550:15;1599:14748;;;;;;;;;;;;;;;;;;;:::i;:::-;7785:129;;;2015:42;7785:129;;;;;;;;;;;6981:321;7928:7;;;:40;;;;6981:321;7924:67;;1599:14748;;;;;;;;;;;;;8048:15;1599:14748;;;;;;;6780:12;1599:14748;;;;;;;8120:33;1599:14748;;;1929:42;1599:14748;;8120:33;7724:9;;8167:15;8163:138;;6981:321;;;;7373:71;6981:321;;1599:14748;6981:321;;;8163:138;7724:9;;8228:13;7724:9;;;8228:13;:::i;:::-;1929:42;8211:35;;1599:14748;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;8264:3;8260:30;;8163:138;;;;8260:30;-1:-1:-1;;;8276:14:0;;1599:14748;4981:14;8276;1599:14748;;;7924:67;-1:-1:-1;;;7977:14:0;;1599:14748;4981:14;7977;7928:40;1599:14748;;;;6780:12;1599:14748;;;;;;7939:29;;7928:40;;7785:129;;;;1599:14748;7785:129;;1599:14748;7785:129;;;;;;1599:14748;7785:129;;;:::i;:::-;;;1599:14748;;;;;7785:129;;;;1599:14748;-1:-1:-1;1599:14748:0;;7785:129;;;-1:-1:-1;7785:129:0;;;1599:14748;;;;;;;;;7720:42;-1:-1:-1;;;7748:14:0;;1599:14748;4981:14;7748;7662:48;;;;1599:14748;7662:48;;1599:14748;7662:48;;;;;;1599:14748;7662:48;;;:::i;:::-;;;1599:14748;;;;;7662:48;;;;;;;-1:-1:-1;7662:48:0;;;1599:14748;;;;;;;;;7546:46;-1:-1:-1;;;7579:13:0;;1599:14748;4853:13;7579;1599:14748;-1:-1:-1;;;1599:14748:0;;;;;;;;6632:93;-1:-1:-1;;;6711:14:0;;1599:14748;4981:14;6711;6636:66;6683:18;;;6667:10;;6666:36;;6636:66;;6516:106;-1:-1:-1;;;6612:10:0;;1599:14748;9288:10;6612;6520:83;6589:14;;;:::i;:::-;6571:15;:32;6520:83;;:47;6556:11;;;;:::i;:::-;6538:15;:29;6520:47;;4521:48;-1:-1:-1;;;4555:14:0;;1599:14748;10249:14;4555;1599:14748;;;;;;;;;;;;;;;;;;;;2305:7;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;11146:15;;:::i;:::-;11127;:34;;11123:57;;1599:14748;;;;;;;;;11248:11;;;1599:14748;11262:10;;;;1599:14748;11248:24;1599:14748;;11248:24;;:::i;:::-;11286:11;;;11282:37;;1599:14748;11363:13;;1599:14748;;-1:-1:-1;;1599:14748:0;-1:-1:-1;;;1599:14748:0;;;11393:22;1599:14748;11466:23;;1599:14748;;11393:22;;1599:14748;;11393:22;:::i;:::-;;1599:14748;11425:26;1599:14748;11425:26;1599:14748;11425:26;:::i;:::-;;1599:14748;;;;;;11466:23;1599:14748;;11282:37;-1:-1:-1;;;11306:13:0;;1599:14748;4853:13;11306;1599:14748;;;;;;;;;;;;;;;;2471:7;1599:14748;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2254:6;1599:14748;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;:::i;:::-;1763:42;16023:10;:21;;;:38;;;1599:14748;16023:59;;;;1599:14748;16019:86;;16145:34;1599:14748;16145:34;;;1599:14748;;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;16200:1;16189:12;1599:14748;1763:42;16211:50;;;;1599:14748;;;;;;16211:50;;16246:4;1599:14748;16211:50;;1599:14748;;;;;;;;;;;16211:50;;;;;1763:42;16211:50;;;;;;;;1599:14748;16271:48;;1763:42;16271:48;;;;1599:14748;;;;;;16271:48;;;1599:14748;16271:48;;1599:14748;;;;;;;;;16271:48;;16211:50;16271:48;;1763:42;16271:48;;;;;;;;1599:14748;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;16271:48;;;;;;:::i;:::-;1599:14748;;16271:48;;;;1599:14748;;;;;;;;;16211:50;;;;;:::i;:::-;1599:14748;;16211:50;;;;16019:86;-1:-1:-1;;;16091:14:0;;1599:14748;10249:14;16091;16023:59;16065:17;1599:14748;16065:17;;;16023:59;;:38;1599:14748;16060:1;16048:8;1599:14748;16048:13;;16023:38;;1599:14748;;;;;;;;;;;;;;3217:25;1599:14748;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;2850:39;1599:14748;2850:39;;1599:14748;2850:39;;;;1599:14748;2850:39;;;1599:14748;;2850:39;;1599:14748;;;;;;;;2850:39;;;1599:14748;;2850:39;;;;;1599:14748;2850:39;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:7;1599:14748;;;;;;;;;;;;;;;;;;;2523:4;1599:14748;;;;;;;;;;;;;;;;;;;6154:9;1599:14748;6165:10;1599:14748;6177:24;1599:14748;6203:12;1599:14748;;6217:9;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2015:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;-1:-1:-1;1599:14748:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;13097:27;;13118:4;1599:14748;13097:27;;1599:14748;;13097:27;;;1681:42;13097:27;;;;;;;1599:14748;13097:27;;;1599:14748;-1:-1:-1;;;;;;1599:14748:0;13083:10;:41;;;;:75;;1599:14748;13079:102;;13097:27;1599:14748;-1:-1:-1;;;;;1599:14748:0;;;;;;;;13083:10;13195:26;;;;:60;;;1599:14748;13195:97;;;;1599:14748;13195:134;;;;;;1599:14748;13191:161;;13367:9;;:::i;:::-;:30;;;1599:14748;13366:69;;;;1599:14748;13362:96;;13484:9;;:::i;:::-;:91;;;13512:13;;:::i;:::-;1599:14748;;-1:-1:-1;;;1599:14748:0;;;;13496:46;1599:14748;13530:12;1599:14748;;;;13496:46;:::i;:::-;13484:91;;1599:14748;;13756:14;;;:46;;;;13484:91;13756:76;;;;13484:91;13756:115;;;2107:5;13835:12;1599:14748;;13756:115;13893:18;1599:14748;13885:26;;;;:63;;;;;13756:115;13885:113;;;;13756:115;13881:140;;;14035:15;;:::i;:::-;14053:81;1599:14748;14053:60;:50;:35;:16;1599:14748;14070:18;1599:14748;14053:35;;:::i;:::-;14091:12;1599:14748;14053:50;;:::i;:::-;14104:9;1599:14748;14053:60;;:::i;:::-;:81;:::i;:::-;-1:-1:-1;14031:133:0;;13083:10;1599:14748;;14174:8;1599:14748;;;;;;14221:46;14241:26;1599:14748;;;;;;;;;;;;;;;;;;;;;;;14241:26;:::i;:::-;14053:16;1599:14748;14221:46;:::i;:::-;14053:16;1599:14748;14277:21;1599:14748;14091:12;1599:14748;14277:21;:::i;:::-;14091:12;1599:14748;14308:19;1599:14748;14308:19;1599:14748;14308:19;:::i;:::-;;1599:14748;14341:10;14337:47;;13756:115;1599:14748;;2209:2;14398:9;1599:14748;14398:24;14394:47;;13756:115;14700:35;14053:16;1599:14748;14070:18;1599:14748;14700:35;;:::i;:::-;14749:28;2362:10;14749:28;;;:68;;;13756:115;14745:295;;13756:115;1599:14748;;-1:-1:-1;;;1599:14748:0;;;;;14745:295;13118:4;14837:38;;;;1599:14748;;-1:-1:-1;;;14837:38:0;;1599:14748;14837:38;;1599:14748;;;-1:-1:-1;1599:14748:0;13097:27;1599:14748;-1:-1:-1;13118:4:0;14858:7;14837:38;;;;;14745:295;-1:-1:-1;14833:197:0;;2420:7;14923:15;1599:14748;14923:15;;;1599:14748;;;;14979:36;1599:14748;;;14903:53;1599:14748;;;;;;14979:36;14833:197;14745:295;;;;;1599:14748;-1:-1:-1;;;1599:14748:0;;;;;13097:27;;1599:14748;14833:197;;;;;;14837:38;;;;;1599:14748;14837:38;;:::i;:::-;1599:14748;14837:38;;;;14749:68;1599:14748;14800:17;1599:14748;14781:15;:36;;14749:68;;14394:47;;;:::i;:::-;;;14337;1599:14748;14358:26;1599:14748;;;;;;14358:26;14337:47;;;;14031:133;14143:21;;;1599:14748;14143:21;1599:14748;;14143:21;13881:140;4981:14;;;1599:14748;14007:14;1599:14748;;14007:14;13885:113;13981:5;1599:14748;;;;-1:-1:-1;1599:14748:0;;;;;;;;;;13989:9;1599:14748;;13952:46;;13885:113;;;1599:14748;;;;;;;;;13097:27;1599:14748;;13885:63;1599:14748;;;13915:12;1599:14748;13915:33;13885:63;;;13756:115;1599:14748;13756:115;;:76;13824:8;;;:::i;:::-;13806:15;1599:14748;13806:26;13756:76;;:46;1599:14748;;13774:15;1599:14748;13774:28;;13756:46;;;13484:91;13560:13;;:::i;:::-;1599:14748;;13484:91;;;13366:69;13404:9;;;:::i;:::-;13403:10;:31;;13366:69;13403:31;13417:13;1599:14748;13417:13;;:::i;:::-;1599:14748;;13417:17;13366:69;;13367:30;13380:13;1599:14748;13380:13;;:::i;:::-;1599:14748;;13380:17;13367:30;;13195:134;13314:15;;13296;1599:14748;13296:33;13195:134;;:97;1599:14748;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13277:15;;13259:14;1599:14748;13259:33;;13195:97;;;;:60;13083:10;;;1599:14748;;13225:8;1599:14748;;;;;;;;;;;;;;;;;13195:60;;;13079:102;10249:14;;;1599:14748;13167:14;1599:14748;;13167:14;13083:75;-1:-1:-1;1599:14748:0;;-1:-1:-1;;;13129:29:0;;13083:10;1599:14748;13129:29;;1599:14748;;;13097:27;1599:14748;1681:42;13129:29;;;;;;;1599:14748;13129:29;;;13083:75;13128:30;;13083:75;;13129:29;;;1599:14748;13129:29;;1599:14748;13129:29;;;;;;1599:14748;13129:29;;;:::i;:::-;;;1599:14748;;;;;;;;;;;;13129:29;;;;;;-1:-1:-1;13129:29:0;;;1599:14748;;;;;;;;;13097:27;;;1599:14748;13097:27;;1599:14748;13097:27;;;;;;1599:14748;13097:27;;;:::i;:::-;;;1599:14748;;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;13097:27;;;;;;-1:-1:-1;13097:27:0;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;2420:7;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3172:39;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9264:15;;;;:::i;:::-;9246;:33;9242:56;;1599:14748;;;;;;;;;9354:17;;;1599:14748;;;;;;;;9353:18;1599:14748;;9353:40;;1599:14748;9349:63;;1599:14748;;;;;9422:39;;-1:-1:-1;;;;;1599:14748:0;;9475:17;;9471:44;;1599:14748;9541:16;;1599:14748;;;;;;;;9598:19;1599:14748;;9598:19;;;;:::i;:::-;9632:9;1599:14748;9627:215;9661:3;9643:16;;;;;;1599:14748;9698:8;1599:14748;;;;;;9727:14;;;:104;:14;;;1599:14748;;9754:31;1599:14748;9754:31;;1599:14748;;;;;;;;9754:31;;;1599:14748;9754:31;;:::i;:::-;1599:14748;9744:42;;9727:104;9661:3;1599:14748;9632:9;;;9727:104;1599:14748;;;9799:31;1599:14748;9799:31;;1599:14748;;;;;;;;9799:31;;;1599:14748;9799:31;;:::i;:::-;1599:14748;9789:42;;9727:104;;9643:16;;;;1599:14748;;9855:18;9851:45;;9969:21;1599:14748;;;-1:-1:-1;;;1599:14748:0;;;;;;;;9936:12;1599:14748;;;;;;;;;;;;;;;;;;;9969:21;1599:14748;;;;;;;;;;;;;9422:39;4853:13;;;1599:14748;9448:13;1599:14748;;9448:13;9349:63;9288:10;;;1599:14748;9402:10;1599:14748;;9402:10;9353:40;1599:14748;;;;9375:18;9353:40;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;2362:10;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3142:24;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3281:24;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;-1:-1:-1;;4525:10:0;:21;4521:48;;1599:14748;;4826:40;;4880:24;;:54;;;;1599:14748;4880:92;;;;1599:14748;4876:119;;1599:14748;;;5078:36;1599:14748;;;;5034:29;1599:14748;;;;;;;;;;5078:36;1599:14748;4880:92;4948:15;4966:6;4948:15;1599:14748;4948:15;;1599:14748;;;4938:34;;4880:92;;:54;4919:15;;4908:26;;;4880:54;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;10122:16;1599:14748;;;;;;;;;;;;;10122:16;1599:14748;;;10122:16;1599:14748;;10122:16;;:::i;:::-;1599:14748;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3248:27;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;5892:78;;2471:7;1599:14748;5892:78;;1599:14748;;;;;;;;;;;;;5892:78;;;2015:42;5892:78;;;;;;1599:14748;5892:78;;;1599:14748;;;;;;;;;5892:78;;1599:14748;5892:78;;1599:14748;5892:78;;;;;;1599:14748;5892:78;;;:::i;:::-;;;1599:14748;;;;;;;5892:78;;;;;-1:-1:-1;5892:78:0;;1599:14748;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;:::i;:::-;;;;;;;;;;;;10224:16;;1599:14748;-1:-1:-1;;;;;1599:14748:0;10210:10;:30;10206:57;;10283:2;;;:::i;1599:14748::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1929:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1763:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1681:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;3105:31;1599:14748;;;;;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;1847:42;1599:14748;;;;;;;;;-1:-1:-1;;1599:14748:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1599:14748:0;;;;;;;;-1:-1:-1;;1599:14748:0;;;;:::o;:::-;;;;;;;;;;:::o;5127:99::-;5184:9;1599:14748;;;;;;;;;5127:99;:::o;5425:146::-;5493:9;1599:14748;5493:14;5489:37;;5543:8;;:::i;:::-;2254:6;1599:14748;;;;;;;5425:146;:::o;1599:14748::-;;;;;;;;;;:::o;8465:483::-;;;2015:42;8557:10;:25;8553:52;;1599:14748;-1:-1:-1;1599:14748:0;8628:20;1599:14748;;;-1:-1:-1;1599:14748:0;;8666:7;;;:28;;;;8465:483;8662:41;;-1:-1:-1;;1599:14748:0;;;;;;;;-1:-1:-1;1599:14748:0;-1:-1:-1;1599:14748:0;;;-1:-1:-1;1599:14748:0;8766:15;;;;1599:14748;8760:21;;;;:42;;;8465:483;8760:59;;;;8465:483;8756:72;;1599:14748;;;;;8837:16;;;1599:14748;8628:20;8874:17;1599:14748;;-1:-1:-1;;1599:14748:0;;;;;8913:28;-1:-1:-1;;8913:28:0;8465:483::o;1599:14748::-;;;;-1:-1:-1;1599:14748:0;;;;;-1:-1:-1;1599:14748:0;8756:72;8821:7;;;;;:::o;8760:59::-;8806:13;1599:14748;8628:20;8806:13;;1599:14748;;;;8760:59;;:42;8785:17;1599:14748;8628:20;8785:17;;1599:14748;;;;8760:42;;8662:41;8696:7;;;;:::o;8666:28::-;8677:17;8693:1;8677:17;;;8666:28;;5231:189;5304:9;1599:14748;5304:14;;;:34;;;;5231:189;5300:61;;5395:1;1599:14748;;;;;;;2158:7;1599:14748;;;;;;2158:7;1599:14748;;;;;;;5378:35;;;:::i;:::-;5231:189;:::o;5304:34::-;5322:16;2209:2;5322:16;;;5304:34;;1599:14748;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;1599:14748:0;;;;;-1:-1:-1;1599:14748:0;5704:96;5768:14;;:::i;:::-;2305:7;1599:14748;;;;;;;5704:96;:::o;1599:14748::-;;;;;;;;-1:-1:-1;;1599:14748:0;;;;:::o;:::-;13367:9;1599:14748;;;;;;;;;:::o;:::-;13380:13;1599:14748;;;;;;;;;:::o;15093:115::-;1599:14748;;-1:-1:-1;;;15157:48:0;;15197:4;15157:48;;;1599:14748;-1:-1:-1;1599:14748:0;;;;;;15157:48;1599:14748;1763:42;15157:48;;;;;;;15203:1;15157:48;;;15150:55;15093:115;:::o;15157:48::-;;;1599:14748;15157:48;;1599:14748;15157:48;;;;;;1599:14748;15157:48;;;:::i;:::-;;;1599:14748;;;;;15093:115;:::o;15157:48::-;;;-1:-1:-1;15157:48:0;;8954:198;;1599:14748;;9087:55;;;;9098:13;;1599:14748;;9121:4;1599:14748;;;;;;;;;;;;;;;;;;;;;;;9087:55;;;;;;:::i;:::-;1599:14748;9077:66;;1599:14748;;9087:55;1599:14748;;;;;9087:55;1599:14748;;;;;;:::i;:::-;;9054:91;;8954:198;:::o;10298:553::-;10377:15;;:::i;:::-;10359;:33;10355:56;;1599:14748;-1:-1:-1;1599:14748:0;-1:-1:-1;1599:14748:0;;;-1:-1:-1;1599:14748:0;10467:13;;;1599:14748;;;;;;;;10466:14;1599:14748;;10466:44;;10298:553;10466:64;;;;10298:553;10462:87;;10576:11;;;1599:14748;10590:10;;;;1599:14748;10576:24;1599:14748;;10576:24;;:::i;:::-;10614:11;;;10610:37;;1599:14748;10610:37;;;:::i;:::-;1599:14748;;;;;;;10746:19;1599:14748;10746:19;1599:14748;10746:19;:::i;:::-;;1599:14748;15733:8;1599:14748;15729:36;;15786:1;15733:8;1599:14748;;;;-1:-1:-1;;;;;1599:14748:0;;;15826:21;;1599:14748;;;;;;;15826:21;;;1599:14748;;-1:-1:-1;;15826:21:0;1599:14748;;15826:21;:::i;1599:14748::-;15797:51;;;1763:42;15797:51;;;;;;;;10298:553;1599:14748;10467:13;15733:8;1599:14748;15862:13;15858:40;;-1:-1:-1;15733:8:0;1599:14748;10819:12;;;;;1599:14748;;;;-1:-1:-1;;;;;1599:14748:0;;;;;;;;;;;;;;;10806:38;;;10298:553::o;15797:51::-;;;-1:-1:-1;15797:51:0;;;;;;:::i;:::-;;;1599:14748;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1599:14748:0;;;;;;;;;;;;;15797:51;;10466:64;-1:-1:-1;;;;;;1599:14748:0;;10514:16;10466:64;;:44;-1:-1:-1;10484:12:0;;;1599:14748;-1:-1:-1;;;;;1599:14748:0;10484:26;10466:44;;11834:720;11896:10;1599:14748;11920:11;;11916:24;;-1:-1:-1;11896:10:0;1599:14748;11977:24;1599:14748;11977:29;;:67;;;11834:720;11973:575;;;11977:24;1599:14748;-1:-1:-1;;1599:14748:0;;;;;;;-1:-1:-1;1599:14748:0;-1:-1:-1;1599:14748:0;;12165:13;1599:14748;-1:-1:-1;1599:14748:0;12130:11;;;:21;1599:14748;;;12130:21;:::i;:::-;1599:14748;;12165:13;1599:14748;;-1:-1:-1;;1599:14748:0;;;11977:24;1599:14748;-1:-1:-1;;1599:14748:0;;;;;;;;;12205:51;1599:14748;;;;;;12205:51;11834:720::o;11973:575::-;1599:14748;;12429:22;12510:27;1599:14748;12429:22;1599:14748;12429:22;:::i;:::-;;1599:14748;12465:26;1599:14748;12465:26;1599:14748;12465:26;:::i;:::-;;1599:14748;;;;;;12510:27;11834:720::o;11977:67::-;12029:15;;;:::i;:::-;12010;:34;;11977:67;;11916:24;11933:7;:::o;15213:167::-;15265:15;;:::i;:::-;15283:60;:50;:35;:16;1599:14748;15300:18;1599:14748;15283:35;;:::i;:60::-;-1:-1:-1;15261:112:0;;15213:167::o","linkReferences":{},"immutableReferences":{}}}}}}},"signatures":{"function":[{"signature":"announcementHash()","signatureHash4":"0x1274c3f3","signatureHash32":"0x1274c3f3ba35b7a7db2e414428a926c29e88f93d3d43089983fbcfca33a2f8d5"},{"signature":"CALLBACK_GAS()","signatureHash4":"0x9779ea46","signatureHash32":"0x9779ea46a4780a22e219f79911fd2347efffa5e23704400e0882f723aa7929cd"},{"signature":"claimDeadline()","signatureHash4":"0x3ba86c44","signatureHash32":"0x3ba86c44f7eaf3bd74aaf1f5bf34d3ebccd871d7d405aeee6dc88d562cb6b0ca"},{"signature":"claimTo(uint256,address)","signatureHash4":"0x30e1198b","signatureHash32":"0x30e1198b5339fc3dd26c5ca1b46d59ab991fdd2f6de9b5a54e946e7f911aa57a"},{"signature":"claim(uint256)","signatureHash4":"0x379607f5","signatureHash32":"0x379607f58d976a91dd60b78d74592fb4bb001d7e08e70945c78343ec21864f46"},{"signature":"CLAIM_WINDOW()","signatureHash4":"0x9f34fc80","signatureHash32":"0x9f34fc8051be25785936187fcbf1c79bb75b49a92b6ec53332d548f8b567a81e"},{"signature":"closesAt(uint256)","signatureHash4":"0x28c13a1c","signatureHash32":"0x28c13a1c5db5e013ba5989f57392dc640165617262353586239a744630e03ac4"},{"signature":"COLLECT_BACKOFF()","signatureHash4":"0x5ed73d59","signatureHash32":"0x5ed73d59b66751caff8770b21843fea696a395d5c6630c2f5ff5fee7c7ebe869"},{"signature":"collectFees(uint256)","signatureHash4":"0xb17acdcd","signatureHash32":"0xb17acdcd2637700392f467c32167687a513f13fa089b87fd7b934ea84b6f8713"},{"signature":"collectRetryAfter()","signatureHash4":"0xf1e05eb7","signatureHash32":"0xf1e05eb71420209d93ca0193087a4925268bb0a236c4adbc82b1f57e0c528958"},{"signature":"COLLECT_THRESHOLD()","signatureHash4":"0x49631c17","signatureHash32":"0x49631c1783551dd37588215259fc5f884e0d9a95c0bc8df788edeaa20af31637"},{"signature":"drawFee(uint256)","signatureHash4":"0x3370eb7d","signatureHash32":"0x3370eb7d042e3bec1b0d035ec302234fa3367b2ce57758c1cfe2fc169f0ffa46"},{"signature":"drawState()","signatureHash4":"0x865e0d48","signatureHash32":"0x865e0d48d9b40abf39a36793697c176530eaa0c11e2c95ba6c46a62d6fd674a0"},{"signature":"endsAt()","signatureHash4":"0x0a09284a","signatureHash32":"0x0a09284ae9f1ed69dc3b39c9077537ce2b222978edfde24bb376e471a3c09c09"},{"signature":"FEE_SHARE_DIVISOR()","signatureHash4":"0xe74e607b","signatureHash32":"0xe74e607b452d7b42019b32bc3a8f92123afe12ab9cee9cdf3335769ba5d4cc29"},{"signature":"finishSealing()","signatureHash4":"0xaaac0462","signatureHash32":"0xaaac046230f8d82bca9ab1089d23283859657b320c9c576a7fbb6fd8a2a3f46a"},{"signature":"GOVERNANCE()","signatureHash4":"0x14627834","signatureHash32":"0x146278342befae1a4808274f5d358c84b71a338acfa0286995cf5d04ada1235d"},{"signature":"lastEligibleRoundPlusOne()","signatureHash4":"0x599a949e","signatureHash32":"0x599a949eaa4cf1416117f666d5c095e4b11877a1509ac31e2d5e7dbfce62bb07"},{"signature":"leaf(uint256,uint256,address)","signatureHash4":"0xa7791196","signatureHash32":"0xa7791196fc474347bbbb16ba6a249ab53b150936530608bdaa22fa1255fe6458"},{"signature":"lpRewardsPaused()","signatureHash4":"0x8661024b","signatureHash32":"0x8661024b1f82755e1e9443035a507e2151ca4e77745e35f60e37cdabecda4489"},{"signature":"MANAGER()","signatureHash4":"0x1b2df850","signatureHash32":"0x1b2df8504d1c5665ab6e26aa2f40fa92dc0309df6a26c52108c627f8ceb73e90"},{"signature":"nextRound()","signatureHash4":"0x47e40553","signatureHash32":"0x47e40553b53298317e19837bc3cdf25123bb99eb704a1558a437aa82bb36ba07"},{"signature":"onTrade((uint256,address,address,bool,int128,int128,uint256,uint256,uint256,uint256,bytes32),bytes)","signatureHash4":"0x676bab01","signatureHash32":"0x676bab014451b1fe7d43e9ddbe7b05c73328c33e9f5f70d61fe914770a1b11dc"},{"signature":"pendingPot()","signatureHash4":"0x8f82543f","signatureHash32":"0x8f82543f9dd115555f22b549a3ee6b863d8a2abb5a401a76f89c55df5bbcfff9"},{"signature":"prizeAccrued()","signatureHash4":"0x3471fd3e","signatureHash32":"0x3471fd3ecae26e25d100b3f0204467ef769f7518f617fcd79df22acf5993c85c"},{"signature":"prizePaid()","signatureHash4":"0x444897ff","signatureHash32":"0x444897ff3a27b446ee3d3c06995c01bf8b16f60b002c1e2b18287b4f3959f2b8"},{"signature":"quote(address,bool,int256,uint160,uint128,bytes)","signatureHash4":"0xdc88d0cf","signatureHash32":"0xdc88d0cfea14d08e5a4cd52b53ca67482726f87b9af35b8caa32e7a8998ae66c"},{"signature":"rawFulfillRandomWords(uint256,uint256[])","signatureHash4":"0x1fe543e3","signatureHash32":"0x1fe543e3b61343c92f04855aa77044ac4c35e9724cc15577b62e72157ad750cc"},{"signature":"received(address,uint256)","signatureHash4":"0xf11e547d","signatureHash32":"0xf11e547d796cc64acdf758e7cee90439494fd886a19159454aa61e473fdbafef"},{"signature":"RECIPIENT()","signatureHash4":"0x0d9019e1","signatureHash32":"0x0d9019e18b74b30e8a0b5739dd6c9b4eb9f453e46fedfcc8df63b685585d4828"},{"signature":"recipientAccrued()","signatureHash4":"0xa7b573ca","signatureHash32":"0xa7b573ca5c6b80e86060f26f312781d943a423ef5c4255e1c2c0fa2f56372623"},{"signature":"recipientCollected()","signatureHash4":"0xa6cf7f10","signatureHash32":"0xa6cf7f1045a5d15ebaedecc7ce44328d9de1bc532b2884698469ece01b710efa"},{"signature":"requestedAt(uint256)","signatureHash4":"0x82fadcc2","signatureHash32":"0x82fadcc2b90720fbc8f4fab5f0db3e4c8ec4d5a243a859879b8ddd4fb3b4a4b1"},{"signature":"reserveClaims()","signatureHash4":"0x96b24c00","signatureHash32":"0x96b24c00d7a4b4e7828f1df2b9c50433a71ddeb22f44c95c23b5926d335101e4"},{"signature":"ROUND_COUNT()","signatureHash4":"0xca6015db","signatureHash32":"0xca6015db848a93e9898d7eb20b86774e22cafea79b245f7def6a040ab0abd535"},{"signature":"ROUND_SECONDS()","signatureHash4":"0x8b3e0476","signatureHash32":"0x8b3e047650493e752cd7f18f7fc58ba84a0adbb576ce2751cf44342b16bff7cd"},{"signature":"rounds(uint256)","signatureHash4":"0x8c65c81f","signatureHash32":"0x8c65c81f3104f6412f6445d9c64328c8024ee7bd6b4bd8e873191bd514e34465"},{"signature":"sealDeadline()","signatureHash4":"0x1ca104a9","signatureHash32":"0x1ca104a9d6d89cb18655ec77265c09c2f583a85768d3c58487e4a7e0bd6116fd"},{"signature":"SEAL_GRACE()","signatureHash4":"0x96556475","signatureHash32":"0x965564752b4727148f3ab659303ee1409aa0079ed12beb82bacecf06a09f29d7"},{"signature":"seal(uint256,bytes32,uint32,bytes32)","signatureHash4":"0xa0689031","signatureHash32":"0xa0689031e1589666cf2e2775b139292880634e5383abbb1a1449559ed838ce63"},{"signature":"settle(uint256,address,bytes32[])","signatureHash4":"0x5661b717","signatureHash32":"0x5661b7177c64827e14bc6fe6c0332a1f2aa41ea37a7f2ef1975cf464b8ad1ca6"},{"signature":"SPONSOR()","signatureHash4":"0x1d073a7a","signatureHash32":"0x1d073a7af475eefa31492364dbe99f20d3cb8787bf86fef33ee53341bcb263a4"},{"signature":"start(bytes32,uint256)","signatureHash4":"0x39018b8e","signatureHash32":"0x39018b8e6a0314ffcf9c41a5168ac05c1182c23c233673bccb4cdab54b2c1671"},{"signature":"startedAt()","signatureHash4":"0xf21f537d","signatureHash32":"0xf21f537d756f4a98aed2b02225ad8dc007eefbab5d818b94300ef88b8e146c04"},{"signature":"sweepExpired(uint256)","signatureHash4":"0x98bc402d","signatureHash32":"0x98bc402dc24edb9612c600eff01ef0feddc8d41b0beaff46468c448629a64f96"},{"signature":"unlockCallback(bytes)","signatureHash4":"0x91dd7346","signatureHash32":"0x91dd7346410d7d3e1561ab65859d8ebbee84f666c7eb10ddc6d9424bc35ec2ee"},{"signature":"VRF_WRAPPER()","signatureHash4":"0x778062a1","signatureHash32":"0x778062a1c68347548a9465db2dabf0f1b33f06752cac224ebca54dea7df9fa91"}],"event":[{"signature":"CampaignStarted(uint256,bytes32)","signatureHash4":"0xda99f424","signatureHash32":"0xda99f424f4b343b171a6bab0571655e865e7366818c5c87fd9118dbc731a98a9"},{"signature":"CollectionDeferred(uint256,uint256)","signatureHash4":"0xff7e1fe0","signatureHash32":"0xff7e1fe0c585e56c3169651fd1510e02bd4c92bfde2886b1d4bbb64a6795071b"},{"signature":"FeesCollected(uint256)","signatureHash4":"0x860c0aa5","signatureHash32":"0x860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f"},{"signature":"LatePotAssigned(uint256,uint256)","signatureHash4":"0xc7838549","signatureHash32":"0xc783854938299dc57460deb40a0fa35b35f08f154d7b2b0ef262bfaa12527cca"},{"signature":"NoEntrantsRemainder(uint256)","signatureHash4":"0x3e0eacaa","signatureHash32":"0x3e0eacaa869e03ca54b3ff68315fe703b02a91c5cff5a032eeb830aa0e8a57b0"},{"signature":"PotFunded(uint256,uint256)","signatureHash4":"0xaf87dee8","signatureHash32":"0xaf87dee8e5fc8fe28a934a5511071c36c94b4fe63a8c4fc1c5e737e8ebef435a"},{"signature":"PrizeExpired(uint256,uint256)","signatureHash4":"0x8b15a0b7","signatureHash32":"0x8b15a0b729ab84887af301417db9dd9744f4247286bbe82ff3bf3fcb6d785e09"},{"signature":"PrizePaid(uint256,address,address,uint256)","signatureHash4":"0x5eab6cc1","signatureHash32":"0x5eab6cc13df174a3d427c8f1bbb105e9f5ac31770edd88092331527d9c8fdd65"},{"signature":"RandomnessReceived(uint256,uint256)","signatureHash4":"0x4235fc54","signatureHash32":"0x4235fc540c899ae91eade70d636591126a477a30a8dc25ae4489f396de2a5103"},{"signature":"RandomnessRequested(uint256,uint256,address)","signatureHash4":"0xe09cad43","signatureHash32":"0xe09cad433de20c7c5706a5b423836068ff0ebf2ce5e2466fd10dd811aa85f474"},{"signature":"RoundSealed(uint256,bytes32,uint256,bytes32,uint256,uint256)","signatureHash4":"0x0a7c60cb","signatureHash32":"0x0a7c60cb26bdd8cf575bff257eafa94ea1c35a29d85f8e3346ff477c8b058e35"},{"signature":"Winner(uint256,uint256,address)","signatureHash4":"0x782732c3","signatureHash32":"0x782732c32ed29ecd5b56192acdf24a69cdc255996ccb806866caf1d05eca9702"}],"error":[{"signature":"AlreadyDone()","signatureHash4":"0xbdb90210","signatureHash32":"0xbdb90210f52d8f68ab9dd7668196c96250dc1b15d2e106baa5a9ac4ab6ea0b0a"},{"signature":"InsufficientBacking()","signatureHash4":"0x40db7f87","signatureHash32":"0x40db7f8784b57186a80b5684f6536d034ab5d7f1a6c260838d58cc3c02ae171a"},{"signature":"InvalidInput()","signatureHash4":"0xb4fa3fb3","signatureHash32":"0xb4fa3fb378e34a63a7e6eab158ffc3d14c2207866b49e0062a0069ef6a6b426b"},{"signature":"NotReady()","signatureHash4":"0x9488aaa6","signatureHash32":"0x9488aaa6d4c8422fd206d80a4f6148f09f6483789c11233566b6677a823a66ba"},{"signature":"Unauthorized()","signatureHash4":"0x82b42900","signatureHash32":"0x82b4290015f7ec7256ca2a6247d3c2a89c4865c0e791456df195f40ad0a81367"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"1","address":"0xF54c2f80c7A745C7b73F6c2035B7cAB87672f0A0"}