diff --git a/artifacts/contracts/core/DataTypes.sol/DataTypes.dbg.json b/artifacts/contracts/core/DataTypes.sol/DataTypes.dbg.json index 59166bc..31c2d9a 100644 --- a/artifacts/contracts/core/DataTypes.sol/DataTypes.dbg.json +++ b/artifacts/contracts/core/DataTypes.sol/DataTypes.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/e227c161b97af39988677e65180082ec.json" + "buildInfo": "../../../build-info/c96aab92784d63ce08c6b112913f46c8.json" } diff --git a/artifacts/contracts/core/DataTypes.sol/DataTypes.json b/artifacts/contracts/core/DataTypes.sol/DataTypes.json index 51b9a86..4d2fd64 100644 --- a/artifacts/contracts/core/DataTypes.sol/DataTypes.json +++ b/artifacts/contracts/core/DataTypes.sol/DataTypes.json @@ -3,8 +3,8 @@ "contractName": "DataTypes", "sourceName": "contracts/core/DataTypes.sol", "abi": [], - "bytecode": "0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea264697066735822122078bdfdfbb98192401098df5a6389aadd2cb5cf76b3e1f5af04f14038376f40f464736f6c63430008130033", - "deployedBytecode": "0x600080fdfea264697066735822122078bdfdfbb98192401098df5a6389aadd2cb5cf76b3e1f5af04f14038376f40f464736f6c63430008130033", + "bytecode": "0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220ed19291aba408239fe7ce17eba420cb350ea83c88994bb2b37733371feac745f64736f6c63430008130033", + "deployedBytecode": "0x600080fdfea2646970667358221220ed19291aba408239fe7ce17eba420cb350ea83c88994bb2b37733371feac745f64736f6c63430008130033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json index 8bc604e..0b704d2 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/e227c161b97af39988677e65180082ec.json" + "buildInfo": "../../build-info/c96aab92784d63ce08c6b112913f46c8.json" } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.json b/artifacts/contracts/p2pix.sol/P2PIX.json index 330b0a3..fe3922a 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.json @@ -639,16 +639,6 @@ "name": "_token", "type": "address" }, - { - "internalType": "address", - "name": "_buyerAddress", - "type": "address" - }, - { - "internalType": "uint80", - "name": "_relayerPremium", - "type": "uint80" - }, { "internalType": "uint80", "name": "_amount", @@ -699,6 +689,26 @@ ], "name": "mapLocks", "outputs": [ + { + "internalType": "uint80", + "name": "amount", + "type": "uint80" + }, + { + "internalType": "uint160", + "name": "pixTarget", + "type": "uint160" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "buyerAddress", + "type": "address" + }, { "internalType": "uint256", "name": "sellerKey", @@ -713,36 +723,6 @@ "internalType": "uint256", "name": "expirationBlock", "type": "uint256" - }, - { - "internalType": "uint160", - "name": "pixTarget", - "type": "uint160" - }, - { - "internalType": "uint80", - "name": "relayerPremium", - "type": "uint80" - }, - { - "internalType": "uint80", - "name": "amount", - "type": "uint80" - }, - { - "internalType": "address", - "name": "buyerAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "relayerAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" } ], "stateMutability": "view", @@ -1061,8 +1041,8 @@ "type": "receive" } ], - "bytecode": "0x608060405262002bf280380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516127b09081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816002556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600355565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102065780630d2a2d441461020157806313af4035146101fc5780632cc0f905146101f7578063328a7181146101f2578063367821f0146101ed578063461f3120146101a757806349ef8448146101e85780634b2ae980146101e3578063574983c8146101de5780635fd8c710146101d957806369cc6af4146101d45780636d82d9e0146101cf57806377cd38a4146101ca5780637f94f65d146101c557806380e1d302146101c057806384ab1d28146101bb5780638da5cb5b146101b65780638db564c2146101b15780639872dbfe146101ac57806398a26871146101a75780639eee8d4b146101a2578063ad8f2eed1461019d578063b0983d3914610198578063c52164c614610193578063c593dfd81461018e578063d1c0702814610189578063d4fac45d14610184578063d6e8b9731461017f578063f7d0e04b1461017a5763fb8c5ef00361000e576115d8565b611568565b6114bd565b6114a4565b611402565b610f65565b610f31565b610ef7565b610ea1565b610e61565b61093d565b610e43565b610e25565b610df1565b610dbb565b610da2565b610d51565b610d19565b610c08565b610bc8565b610b45565b610ae1565b610ab7565b610a20565b610882565b610651565b61058d565b610498565b61036b565b346102325760206003193601126102325760043560005260066020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102a757604052565b610237565b60405190610120820182811067ffffffffffffffff8211176102a757604052565b67ffffffffffffffff81116102a75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361023257565b81601f820112156102325780359161031a836102cd565b926103286040519485610266565b808452602092838086019260051b820101928311610232578301905b828210610352575050505090565b8380918335610360816102e5565b815201910190610344565b34610232576020806003193601126102325760043567ffffffffffffffff81116102325761039d903690600401610303565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361046e57805181830192849160051b830181013d1515855b811561043a575b50505060405192818401908285525180915260408401949160005b828110610424577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b83518516875295810195928101926001016103f5565b90838260018298969499979951600c1b550190838210156104625791509593959492946103d3565b509593959492946103da565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576004356104b5816102e5565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361046e577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b6064359069ffffffffffffffffffff8216820361023257565b6084359069ffffffffffffffffffff8216820361023257565b9181601f840112156102325782359167ffffffffffffffff8311610232576020808501948460051b01011161023257565b346102325760e0600319360112610232576004356105aa816102e5565b602435906105b7826102e5565b604435916105c4836102e5565b6105cc61052a565b916105d5610543565b67ffffffffffffffff9360a435858111610232576105f790369060040161055c565b92909160c435968711610232576106319761061961062198369060040161055c565b97909661193f565b6040519081529081906020820190565b0390f35b60643590811515820361023257565b3590811515820361023257565b346102325760a06003193601126102325760043561066e816102e5565b6024356bffffffffffffffffffffffff8116908181036102325760443590610695826102e5565b61069d610635565b6084359373ffffffffffffffffffffffffffffffffffffffff8087169033600c1b90861615610858576106e56106e18363cbc9d1c4600c526000526020600c205490565b1590565b61082e576b3fffffffffffffffffffffff61071683839060205263739094b1600c52600c1c6000526034600c205490565b16906a52b7d2dcc80cd2e400000061072e85846117e6565b1161080457826107ef976107a89661077a8961079f967f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf9d61076e6117f3565b806107f4575b506117e6565b9060ff1b91605f1b1717919060205263739094b1600c52600c1c6000526034600c2055565b3090339061182e565b6107b26001600355565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2005b6107fe9033612171565b38610774565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b346102325760206003193601126102325760048035600090815260056020818152604092839020805460018201546002830154600384015497840154958401546006909401548751938452948301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff808616606086015269ffffffffffffffffffff60a096871c8116608087015284169585019590955260509290921c841660c084015290831660e08301529190911661010082015261012090f35b34610232576020600319360112610232576020600435546040519015158152f35b90815180825260208080930193019160005b82811061097e575050505090565b835185529381019392810192600101610970565b906109a59060408352604083019061095e565b81810360209283015282518082529082019282019160009190825b8281106109cf57505050505090565b909192939485516004808210156109f4575081528201948201939291906001016109c0565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610232576020806003193601126102325760043567ffffffffffffffff8111610232573660238201121561023257806004013590610a5e826102cd565b91610a6c6040519384610266565b80835260248484019160051b8301019136831161023257602401905b828210610aa857610a9884612616565b9061063160405192839283610992565b81358152908401908401610a88565b34610232576020600319360112610232576020600435610ad6816102e5565b60405190600c1b8152f35b346102325760206003193601126102325760043573ffffffffffffffffffffffffffffffffffffffff60005416330361046e576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600255604051908152a1005b3461023257600080600319360112610bc55773ffffffffffffffffffffffffffffffffffffffff815416330361046e57478180808084335af115610bb8576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b34610232576020600319360112610232576020610bfe600435610bea816102e5565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3461023257604060031936011261023257600435610c25816102e5565b602435801515908181036102325733600c1b610c5784829060205263739094b1600c52600c1c6000526034600c205490565b918215610cef57610ca6927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869260ff1b911617919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff6040519216825260208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576020610d496004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461023257604060031936011261023257610019600435610d71816102e5565b60243590612171565b600319604091011261023257600435610d92816102e5565b90602435610d9f816102e5565b90565b34610232576020610bfe610db536610d7a565b9061255e565b3461023257602060031936011261023257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610232576000600319360112610232576020600454604051908152f35b34610232576000600319360112610232576020600254604051908152f35b34610232576040600319360112610232576020610d49602435610e83816102e5565b6004359060205263739094b1600c52600c1c6000526034600c205490565b3461023257610eaf36610d7a565b6000903d15610eda575b60208273ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60205263739094b1600c525260206034600c2054605f1c38610eb9565b346102325760206003193601126102325760043567ffffffffffffffff811161023257610f2b61001991369060040161055c565b90611f17565b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102325760a06003193601126102325760043560843560ff8116810361023257610f8e6117f3565b610fa2826000526005602052604060002090565b60048101805469ffffffffffffffffffff169269ffffffffffffffffffff918285169384156113c75760028101958654431161139d577f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede89661123660058461115b61110998600061112d8d6112789d6110e560036110d59d019b6110a98d549e8f604051928391602083019573ffffffffffffffffffffffffffffffffffffffff602435921687917fffffffffffffffffffff00000000000000000000000000000000000000000000907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000603e959360601b16845260b01b166014830152601e8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610266565b5190209560643560443588611d9c565b611122611109600689015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b9b60a01c1690611d8f565b8a547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168b55965560019055565b019161117e611109845473ffffffffffffffffffffffffffffffffffffffff1690565b33146113585783546111a99060a01c69ffffffffffffffffffff165b69ffffffffffffffffffff1690565b6111cb6111c333600c1b6000526006602052604060002090565b9182546117e6565b90556112076111f76111f1855473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526006602052604060002090565b6112128a82546117e6565b90555b855460501c73ffffffffffffffffffffffffffffffffffffffff1685611e8a565b81546112509060a01c69ffffffffffffffffffff1661119a565b80611293575b505050505473ffffffffffffffffffffffffffffffffffffffff9060501c1690565b60408051948552602085019290925292a26100196001600355565b6112b4611109835473ffffffffffffffffffffffffffffffffffffffff1690565b3314611345575061119a61130861133c94936113216112ea611334955473ffffffffffffffffffffffffffffffffffffffff1690565b61131a61119a611308855469ffffffffffffffffffff9060a01c1690565b60011c697fffffffffffffffffff1690565b9087611e8a565b5460a01c69ffffffffffffffffffff1690565b903390611e8a565b38808080611256565b915050611353913390611e8a565b61133c565b61137c8961137761119a875469ffffffffffffffffffff9060a01c1690565b6117e6565b6113966111c333600c1b6000526006602052604060002090565b9055611215565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610d9f92818152019061095e565b346102325760406003193601126102325760043567ffffffffffffffff811161023257611433903690600401610303565b60243590611440826102e5565b60009181519161144f836125b3565b935b838110611466576040518061063187826113f1565b806114938473ffffffffffffffffffffffffffffffffffffffff61148c60019587612602565b5116612527565b61149d8288612602565b5201611451565b34610232576020610d496114b736610d7a565b90612527565b346102325760406003193601126102325767ffffffffffffffff600435818111610232576114ef903690600401610303565b906024359081116102325736602382011215610232578060040135611513816102cd565b916115216040519384610266565b81835260209160248385019160051b8301019136831161023257602401905b8282106115515761001985876116ed565b83809161155d84610644565b815201910190611540565b3461023257602060031936011261023257600435611585816102e5565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361046e57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1005b34610232576060600319360112610232576004356115f5816102e5565b60243560443567ffffffffffffffff8111610232577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e9161164e6116406116d593369060040161055c565b906116496117f3565b611f17565b611658843361255e565b6116df575b61169933600c1b85836b3fffffffffffffffffffffff61169383859060205263739094b1600c52600c1c6000526034600c205490565b166124eb565b6116a4813386611e8a565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600355005b6116e884611887565b61165d565b9060009073ffffffffffffffffffffffffffffffffffffffff825416330361046e578251918215611797578151830361178a57602092919284818080970195019360051b0101925b838103611743575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191611735565b63ff633a3890526004601cfd5b63df95788390526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116117e157565b6117a4565b919082018092116117e157565b600260035414611804576002600355565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611879576000606052604052565b637939f4246000526004601cfd5b33600c1b6118ab82829060205263739094b1600c52600c1c6000526034600c205490565b908115610cef57827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6118f49316919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9294976119669073ffffffffffffffffffffffffffffffffffffffff9395986116496117f3565b16936119756106e1868461255e565b611c41576119838583612527565b9669ffffffffffffffffffff9687811693848a10611c1757600c1b976119aa6004546117d3565b9560026119c1886000526005602052604060002090565b0154431115611bed576002546119d790436117e6565b976119f88a8c9060205263739094b1600c52600c1c6000526034600c205490565b605f1c611a189073ffffffffffffffffffffffffffffffffffffffff1690565b611a206102ac565b8c8152602081018a9052604081019a909a5273ffffffffffffffffffffffffffffffffffffffff1660608a015269ffffffffffffffffffff16608089015260a0880192611a7990849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff1660c08801523360e088015273ffffffffffffffffffffffffffffffffffffffff88166101008801528315611afd575050611af09791611aeb913391611ae58a6374dfee70600c52600c1c60005260206000205490565b91611c88565b61220f565b90611afb6001600355565b565b819350809250611b2168056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611b37575050611b329561220f565b611af0565b611b68611b63611b5433600c1b6000526006602052604060002090565b54670de0b6b3a7640000900490565b611d16565b81611b86611b80855169ffffffffffffffffffff1690565b92611c6b565b911611918215611bca575b5050611ba057611b329561220f565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611b91565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156117e157565b73ffffffffffffffffffffffffffffffffffffffff8293941692611cda575b505003611cb057565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611d0b579290611ce4565b509150503880611ca7565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102a7576020926000926040525190600154617530fa906000519115611d8157565b63e10bf1cc6000526004601cfd5b919082039182116117e157565b918254611e605760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611e53576060526040829052600c1b5415611e2b5750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611ec657603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611f125760051b0190565b611ed3565b6000905b828210611f38575010611f2a57565b63dfb035c96000526004601cfd5b90611f58611f47828585611f02565b356000526005602052604060002090565b611f61816121c0565b805490611f88611109600683015473ffffffffffffffffffffffffffffffffffffffff1690565b6b3fffffffffffffffffffffff611fb582859060205263739094b1600c52600c1c6000526034600c205490565b1690600493848401946a52b7d2dcc80cd2e4000000611feb611fe461119a895469ffffffffffffffffffff1690565b80966117e6565b11612149575060056120d8946120266001989795612067956111f1959060205263739094b1600c52600c1c6000526034600c20908154019055565b84547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168555015473ffffffffffffffffffffffffffffffffffffffff1690565b61208561207e826000526006602052604060002090565b5460011c90565b68056bc75e2d63100000811161212e57506120ad6120bb916000526006602052604060002090565b68056bc75e2d631000009055565b5460501c73ffffffffffffffffffffffffffffffffffffffff1690565b7f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da573ffffffffffffffffffffffffffffffffffffffff612119848888611f02565b60405190358152921691602090a20190611f1b565b90612143906000526006602052604060002090565b556120bb565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b3381036121b2576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611bed576004015469ffffffffffffffffffff16156113c757565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117e15760010190565b9095949391938460005260056020526040600020928451845560208501516001850155604085015160028501556003840160608601516122629073ffffffffffffffffffffffffffffffffffffffff1690565b8154608088015173ffffffffffffffffffffffffffffffffffffffff929092167fffff0000000000000000000000000000000000000000000000000000000000009091161760a091821b7dffffffffffffffffffff0000000000000000000000000000000000000000161790915585018051600486019991959069ffffffffffffffffffff168a547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001669ffffffffffffffffffff909116178a5560c08701998a516123419073ffffffffffffffffffffffffffffffffffffffff1690565b81547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff000000000000000000001617905560e087015173ffffffffffffffffffffffffffffffffffffffff1660058201906123f2919073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b61010087015173ffffffffffffffffffffffffffffffffffffffff169060060190612457919073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b612460936124eb565b60045461246c906121e2565b60045582945161248f9073ffffffffffffffffffffffffffffffffffffffff1690565b915190516040805192835269ffffffffffffffffffff909116602083015273ffffffffffffffffffffffffffffffffffffffff909216917f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea6591a3565b9291909280848103119015176125195760205263739094b1600c52600c1c6000526034600c20908154039055565b63ce3a3d376000526004601cfd5b600092913d15612535575050565b9091925060205263739094b1600c526000526034600c20546b3fffffffffffffffffffffff1690565b600092913d1561256c575050565b9091925060205263739094b1600c526000526034600c205460ff1c90565b6040516020810181811067ffffffffffffffff8211176102a75760405260008152906000368137565b906125bd826102cd565b6125ca6040519182610266565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125f882946102cd565b0190602036910137565b8051821015611f125760209160051b010190565b90815115612767576000809280519061262e826125b3565b92612638836125b3565b955b83811061264957505050509190565b8061266a61265960019386612602565b516000526005602052604060002090565b5461269a576126798185612602565b516126848288612602565b5282612690828a612602565b5201925b9261263a565b69ffffffffffffffffffff6126c860046126b76126598589612602565b015469ffffffffffffffffffff1690565b166126fd576126d78185612602565b516126e28288612602565b526126f66126f0828a612602565b60039052565b0192612694565b600261270c6126598387612602565b015443111561273e5761271f8185612602565b5161272a8288612602565b526126f6612738828a612602565b60029052565b6127488185612602565b516127538288612602565b526126f6612761828a612602565b60019052565b905061277161258a565b90610d9f61258a56fea26469706673582212203e8aba08cc8e47b6111780acdb9c2bff6dec6f7ca5f953c7cbc481f238b3d8fd64736f6c63430008130033", - "deployedBytecode": "0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102065780630d2a2d441461020157806313af4035146101fc5780632cc0f905146101f7578063328a7181146101f2578063367821f0146101ed578063461f3120146101a757806349ef8448146101e85780634b2ae980146101e3578063574983c8146101de5780635fd8c710146101d957806369cc6af4146101d45780636d82d9e0146101cf57806377cd38a4146101ca5780637f94f65d146101c557806380e1d302146101c057806384ab1d28146101bb5780638da5cb5b146101b65780638db564c2146101b15780639872dbfe146101ac57806398a26871146101a75780639eee8d4b146101a2578063ad8f2eed1461019d578063b0983d3914610198578063c52164c614610193578063c593dfd81461018e578063d1c0702814610189578063d4fac45d14610184578063d6e8b9731461017f578063f7d0e04b1461017a5763fb8c5ef00361000e576115d8565b611568565b6114bd565b6114a4565b611402565b610f65565b610f31565b610ef7565b610ea1565b610e61565b61093d565b610e43565b610e25565b610df1565b610dbb565b610da2565b610d51565b610d19565b610c08565b610bc8565b610b45565b610ae1565b610ab7565b610a20565b610882565b610651565b61058d565b610498565b61036b565b346102325760206003193601126102325760043560005260066020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102a757604052565b610237565b60405190610120820182811067ffffffffffffffff8211176102a757604052565b67ffffffffffffffff81116102a75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361023257565b81601f820112156102325780359161031a836102cd565b926103286040519485610266565b808452602092838086019260051b820101928311610232578301905b828210610352575050505090565b8380918335610360816102e5565b815201910190610344565b34610232576020806003193601126102325760043567ffffffffffffffff81116102325761039d903690600401610303565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361046e57805181830192849160051b830181013d1515855b811561043a575b50505060405192818401908285525180915260408401949160005b828110610424577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b83518516875295810195928101926001016103f5565b90838260018298969499979951600c1b550190838210156104625791509593959492946103d3565b509593959492946103da565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576004356104b5816102e5565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361046e577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b6064359069ffffffffffffffffffff8216820361023257565b6084359069ffffffffffffffffffff8216820361023257565b9181601f840112156102325782359167ffffffffffffffff8311610232576020808501948460051b01011161023257565b346102325760e0600319360112610232576004356105aa816102e5565b602435906105b7826102e5565b604435916105c4836102e5565b6105cc61052a565b916105d5610543565b67ffffffffffffffff9360a435858111610232576105f790369060040161055c565b92909160c435968711610232576106319761061961062198369060040161055c565b97909661193f565b6040519081529081906020820190565b0390f35b60643590811515820361023257565b3590811515820361023257565b346102325760a06003193601126102325760043561066e816102e5565b6024356bffffffffffffffffffffffff8116908181036102325760443590610695826102e5565b61069d610635565b6084359373ffffffffffffffffffffffffffffffffffffffff8087169033600c1b90861615610858576106e56106e18363cbc9d1c4600c526000526020600c205490565b1590565b61082e576b3fffffffffffffffffffffff61071683839060205263739094b1600c52600c1c6000526034600c205490565b16906a52b7d2dcc80cd2e400000061072e85846117e6565b1161080457826107ef976107a89661077a8961079f967f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf9d61076e6117f3565b806107f4575b506117e6565b9060ff1b91605f1b1717919060205263739094b1600c52600c1c6000526034600c2055565b3090339061182e565b6107b26001600355565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2005b6107fe9033612171565b38610774565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b346102325760206003193601126102325760048035600090815260056020818152604092839020805460018201546002830154600384015497840154958401546006909401548751938452948301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff808616606086015269ffffffffffffffffffff60a096871c8116608087015284169585019590955260509290921c841660c084015290831660e08301529190911661010082015261012090f35b34610232576020600319360112610232576020600435546040519015158152f35b90815180825260208080930193019160005b82811061097e575050505090565b835185529381019392810192600101610970565b906109a59060408352604083019061095e565b81810360209283015282518082529082019282019160009190825b8281106109cf57505050505090565b909192939485516004808210156109f4575081528201948201939291906001016109c0565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610232576020806003193601126102325760043567ffffffffffffffff8111610232573660238201121561023257806004013590610a5e826102cd565b91610a6c6040519384610266565b80835260248484019160051b8301019136831161023257602401905b828210610aa857610a9884612616565b9061063160405192839283610992565b81358152908401908401610a88565b34610232576020600319360112610232576020600435610ad6816102e5565b60405190600c1b8152f35b346102325760206003193601126102325760043573ffffffffffffffffffffffffffffffffffffffff60005416330361046e576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600255604051908152a1005b3461023257600080600319360112610bc55773ffffffffffffffffffffffffffffffffffffffff815416330361046e57478180808084335af115610bb8576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b34610232576020600319360112610232576020610bfe600435610bea816102e5565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3461023257604060031936011261023257600435610c25816102e5565b602435801515908181036102325733600c1b610c5784829060205263739094b1600c52600c1c6000526034600c205490565b918215610cef57610ca6927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869260ff1b911617919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff6040519216825260208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576020610d496004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461023257604060031936011261023257610019600435610d71816102e5565b60243590612171565b600319604091011261023257600435610d92816102e5565b90602435610d9f816102e5565b90565b34610232576020610bfe610db536610d7a565b9061255e565b3461023257602060031936011261023257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610232576000600319360112610232576020600454604051908152f35b34610232576000600319360112610232576020600254604051908152f35b34610232576040600319360112610232576020610d49602435610e83816102e5565b6004359060205263739094b1600c52600c1c6000526034600c205490565b3461023257610eaf36610d7a565b6000903d15610eda575b60208273ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60205263739094b1600c525260206034600c2054605f1c38610eb9565b346102325760206003193601126102325760043567ffffffffffffffff811161023257610f2b61001991369060040161055c565b90611f17565b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102325760a06003193601126102325760043560843560ff8116810361023257610f8e6117f3565b610fa2826000526005602052604060002090565b60048101805469ffffffffffffffffffff169269ffffffffffffffffffff918285169384156113c75760028101958654431161139d577f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede89661123660058461115b61110998600061112d8d6112789d6110e560036110d59d019b6110a98d549e8f604051928391602083019573ffffffffffffffffffffffffffffffffffffffff602435921687917fffffffffffffffffffff00000000000000000000000000000000000000000000907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000603e959360601b16845260b01b166014830152601e8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610266565b5190209560643560443588611d9c565b611122611109600689015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b9b60a01c1690611d8f565b8a547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168b55965560019055565b019161117e611109845473ffffffffffffffffffffffffffffffffffffffff1690565b33146113585783546111a99060a01c69ffffffffffffffffffff165b69ffffffffffffffffffff1690565b6111cb6111c333600c1b6000526006602052604060002090565b9182546117e6565b90556112076111f76111f1855473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526006602052604060002090565b6112128a82546117e6565b90555b855460501c73ffffffffffffffffffffffffffffffffffffffff1685611e8a565b81546112509060a01c69ffffffffffffffffffff1661119a565b80611293575b505050505473ffffffffffffffffffffffffffffffffffffffff9060501c1690565b60408051948552602085019290925292a26100196001600355565b6112b4611109835473ffffffffffffffffffffffffffffffffffffffff1690565b3314611345575061119a61130861133c94936113216112ea611334955473ffffffffffffffffffffffffffffffffffffffff1690565b61131a61119a611308855469ffffffffffffffffffff9060a01c1690565b60011c697fffffffffffffffffff1690565b9087611e8a565b5460a01c69ffffffffffffffffffff1690565b903390611e8a565b38808080611256565b915050611353913390611e8a565b61133c565b61137c8961137761119a875469ffffffffffffffffffff9060a01c1690565b6117e6565b6113966111c333600c1b6000526006602052604060002090565b9055611215565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610d9f92818152019061095e565b346102325760406003193601126102325760043567ffffffffffffffff811161023257611433903690600401610303565b60243590611440826102e5565b60009181519161144f836125b3565b935b838110611466576040518061063187826113f1565b806114938473ffffffffffffffffffffffffffffffffffffffff61148c60019587612602565b5116612527565b61149d8288612602565b5201611451565b34610232576020610d496114b736610d7a565b90612527565b346102325760406003193601126102325767ffffffffffffffff600435818111610232576114ef903690600401610303565b906024359081116102325736602382011215610232578060040135611513816102cd565b916115216040519384610266565b81835260209160248385019160051b8301019136831161023257602401905b8282106115515761001985876116ed565b83809161155d84610644565b815201910190611540565b3461023257602060031936011261023257600435611585816102e5565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361046e57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1005b34610232576060600319360112610232576004356115f5816102e5565b60243560443567ffffffffffffffff8111610232577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e9161164e6116406116d593369060040161055c565b906116496117f3565b611f17565b611658843361255e565b6116df575b61169933600c1b85836b3fffffffffffffffffffffff61169383859060205263739094b1600c52600c1c6000526034600c205490565b166124eb565b6116a4813386611e8a565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600355005b6116e884611887565b61165d565b9060009073ffffffffffffffffffffffffffffffffffffffff825416330361046e578251918215611797578151830361178a57602092919284818080970195019360051b0101925b838103611743575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191611735565b63ff633a3890526004601cfd5b63df95788390526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116117e157565b6117a4565b919082018092116117e157565b600260035414611804576002600355565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611879576000606052604052565b637939f4246000526004601cfd5b33600c1b6118ab82829060205263739094b1600c52600c1c6000526034600c205490565b908115610cef57827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6118f49316919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9294976119669073ffffffffffffffffffffffffffffffffffffffff9395986116496117f3565b16936119756106e1868461255e565b611c41576119838583612527565b9669ffffffffffffffffffff9687811693848a10611c1757600c1b976119aa6004546117d3565b9560026119c1886000526005602052604060002090565b0154431115611bed576002546119d790436117e6565b976119f88a8c9060205263739094b1600c52600c1c6000526034600c205490565b605f1c611a189073ffffffffffffffffffffffffffffffffffffffff1690565b611a206102ac565b8c8152602081018a9052604081019a909a5273ffffffffffffffffffffffffffffffffffffffff1660608a015269ffffffffffffffffffff16608089015260a0880192611a7990849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff1660c08801523360e088015273ffffffffffffffffffffffffffffffffffffffff88166101008801528315611afd575050611af09791611aeb913391611ae58a6374dfee70600c52600c1c60005260206000205490565b91611c88565b61220f565b90611afb6001600355565b565b819350809250611b2168056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611b37575050611b329561220f565b611af0565b611b68611b63611b5433600c1b6000526006602052604060002090565b54670de0b6b3a7640000900490565b611d16565b81611b86611b80855169ffffffffffffffffffff1690565b92611c6b565b911611918215611bca575b5050611ba057611b329561220f565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611b91565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156117e157565b73ffffffffffffffffffffffffffffffffffffffff8293941692611cda575b505003611cb057565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611d0b579290611ce4565b509150503880611ca7565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102a7576020926000926040525190600154617530fa906000519115611d8157565b63e10bf1cc6000526004601cfd5b919082039182116117e157565b918254611e605760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611e53576060526040829052600c1b5415611e2b5750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611ec657603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611f125760051b0190565b611ed3565b6000905b828210611f38575010611f2a57565b63dfb035c96000526004601cfd5b90611f58611f47828585611f02565b356000526005602052604060002090565b611f61816121c0565b805490611f88611109600683015473ffffffffffffffffffffffffffffffffffffffff1690565b6b3fffffffffffffffffffffff611fb582859060205263739094b1600c52600c1c6000526034600c205490565b1690600493848401946a52b7d2dcc80cd2e4000000611feb611fe461119a895469ffffffffffffffffffff1690565b80966117e6565b11612149575060056120d8946120266001989795612067956111f1959060205263739094b1600c52600c1c6000526034600c20908154019055565b84547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168555015473ffffffffffffffffffffffffffffffffffffffff1690565b61208561207e826000526006602052604060002090565b5460011c90565b68056bc75e2d63100000811161212e57506120ad6120bb916000526006602052604060002090565b68056bc75e2d631000009055565b5460501c73ffffffffffffffffffffffffffffffffffffffff1690565b7f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da573ffffffffffffffffffffffffffffffffffffffff612119848888611f02565b60405190358152921691602090a20190611f1b565b90612143906000526006602052604060002090565b556120bb565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b3381036121b2576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611bed576004015469ffffffffffffffffffff16156113c757565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117e15760010190565b9095949391938460005260056020526040600020928451845560208501516001850155604085015160028501556003840160608601516122629073ffffffffffffffffffffffffffffffffffffffff1690565b8154608088015173ffffffffffffffffffffffffffffffffffffffff929092167fffff0000000000000000000000000000000000000000000000000000000000009091161760a091821b7dffffffffffffffffffff0000000000000000000000000000000000000000161790915585018051600486019991959069ffffffffffffffffffff168a547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001669ffffffffffffffffffff909116178a5560c08701998a516123419073ffffffffffffffffffffffffffffffffffffffff1690565b81547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff000000000000000000001617905560e087015173ffffffffffffffffffffffffffffffffffffffff1660058201906123f2919073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b61010087015173ffffffffffffffffffffffffffffffffffffffff169060060190612457919073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b612460936124eb565b60045461246c906121e2565b60045582945161248f9073ffffffffffffffffffffffffffffffffffffffff1690565b915190516040805192835269ffffffffffffffffffff909116602083015273ffffffffffffffffffffffffffffffffffffffff909216917f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea6591a3565b9291909280848103119015176125195760205263739094b1600c52600c1c6000526034600c20908154039055565b63ce3a3d376000526004601cfd5b600092913d15612535575050565b9091925060205263739094b1600c526000526034600c20546b3fffffffffffffffffffffff1690565b600092913d1561256c575050565b9091925060205263739094b1600c526000526034600c205460ff1c90565b6040516020810181811067ffffffffffffffff8211176102a75760405260008152906000368137565b906125bd826102cd565b6125ca6040519182610266565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125f882946102cd565b0190602036910137565b8051821015611f125760209160051b010190565b90815115612767576000809280519061262e826125b3565b92612638836125b3565b955b83811061264957505050509190565b8061266a61265960019386612602565b516000526005602052604060002090565b5461269a576126798185612602565b516126848288612602565b5282612690828a612602565b5201925b9261263a565b69ffffffffffffffffffff6126c860046126b76126598589612602565b015469ffffffffffffffffffff1690565b166126fd576126d78185612602565b516126e28288612602565b526126f66126f0828a612602565b60039052565b0192612694565b600261270c6126598387612602565b015443111561273e5761271f8185612602565b5161272a8288612602565b526126f6612738828a612602565b60029052565b6127488185612602565b516127538288612602565b526126f6612761828a612602565b60019052565b905061277161258a565b90610d9f61258a56fea26469706673582212203e8aba08cc8e47b6111780acdb9c2bff6dec6f7ca5f953c7cbc481f238b3d8fd64736f6c63430008130033", + "bytecode": "0x60806040526200293e80380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516124fc9081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816002556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600355565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102065780630d2a2d441461020157806313af4035146101fc578063328a7181146101f7578063367821f0146101f2578063461f3120146101ac57806349ef8448146101ed5780634b2ae980146101e8578063574983c8146101e35780635fd8c710146101de57806369cc6af4146101d95780636d82d9e0146101d457806377cd38a4146101cf5780637f94f65d146101ca57806380e1d302146101c557806384ab1d28146101c05780638da5cb5b146101bb5780638db564c2146101b65780639872dbfe146101b157806398a26871146101ac5780639eee8d4b146101a7578063ad8f2eed146101a2578063b0983d391461019d578063c52164c614610198578063c593dfd814610193578063d1c070281461018e578063d4fac45d14610189578063d6e8b97314610184578063dc43221c1461017f578063f7d0e04b1461017a5763fb8c5ef00361000e5761142c565b6113bc565b611321565b611276565b61125d565b6111bb565b610e65565b610e31565b610df7565b610d70565b610d30565b610808565b610d12565b610cf4565b610cc0565b610c8a565b610c71565b610c20565b610be8565b610ad7565b610a97565b610a14565b6109b0565b610986565b6108eb565b610776565b610545565b610497565b61036a565b346102325760206003193601126102325760043560005260066020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102a757604052565b610237565b6040519060e0820182811067ffffffffffffffff8211176102a757604052565b67ffffffffffffffff81116102a75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361023257565b81601f8201121561023257803591610319836102cc565b926103276040519485610266565b808452602092838086019260051b820101928311610232578301905b828210610351575050505090565b838091833561035f816102e4565b815201910190610343565b34610232576020806003193601126102325760043567ffffffffffffffff81116102325761039c903690600401610302565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361046d57805181830192849160051b830181013d1515855b8115610439575b50505060405192818401908285525180915260408401949160005b828110610423577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b83518516875295810195928101926001016103f4565b90838260018298969499979951600c1b550190838210156104615791509593959492946103d2565b509593959492946103d9565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576004356104b4816102e4565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361046d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b60643590811515820361023257565b3590811515820361023257565b346102325760a060031936011261023257600435610562816102e4565b6024356bffffffffffffffffffffffff8116908181036102325760443590610589826102e4565b610591610529565b6084359373ffffffffffffffffffffffffffffffffffffffff8087169033600c1b9086161561074c576105d96105d58363cbc9d1c4600c526000526020600c205490565b1590565b610722576b3fffffffffffffffffffffff61060a83839060205263739094b1600c52600c1c6000526034600c205490565b16906a52b7d2dcc80cd2e4000000610622858461163a565b116106f857826106e39761069c9661066e89610693967f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf9d610662611647565b806106e8575b5061163a565b9060ff1b91605f1b1717919060205263739094b1600c52600c1c6000526034600c2055565b30903390611682565b6106a66001600355565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2005b6106f29033611f47565b38610668565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b3461023257602060031936011261023257600435600052600560205260e0604060002080549073ffffffffffffffffffffffffffffffffffffffff90816001820154168260028301541660038301549160056004850154940154946040519669ffffffffffffffffffff8116885260501c16602087015260408601526060850152608084015260a083015260c0820152f35b34610232576020600319360112610232576020600435546040519015158152f35b90815180825260208080930193019160005b828110610849575050505090565b83518552938101939281019260010161083b565b9061087090604083526040830190610829565b81810360209283015282518082529082019282019160009190825b82811061089a57505050505090565b909192939485516004808210156108bf5750815282019482019392919060010161088b565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610232576020806003193601126102325760043567ffffffffffffffff8111610232573660238201121561023257806004013590610929826102cc565b916109376040519384610266565b80835260248484019160051b8301019136831161023257602401905b8282106109775761096384612362565b906109736040519283928361085d565b0390f35b81358152908401908401610953565b346102325760206003193601126102325760206004356109a5816102e4565b60405190600c1b8152f35b346102325760206003193601126102325760043573ffffffffffffffffffffffffffffffffffffffff60005416330361046d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600255604051908152a1005b3461023257600080600319360112610a945773ffffffffffffffffffffffffffffffffffffffff815416330361046d57478180808084335af115610a87576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b34610232576020600319360112610232576020610acd600435610ab9816102e4565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3461023257604060031936011261023257600435610af4816102e4565b602435801515908181036102325733600c1b610b2684829060205263739094b1600c52600c1c6000526034600c205490565b918215610bbe57610b75927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869260ff1b911617919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff6040519216825260208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576020610c186004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461023257604060031936011261023257610019600435610c40816102e4565b60243590611f47565b600319604091011261023257600435610c61816102e4565b90602435610c6e816102e4565b90565b34610232576020610acd610c8436610c49565b906122aa565b3461023257602060031936011261023257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610232576000600319360112610232576020600454604051908152f35b34610232576000600319360112610232576020600254604051908152f35b34610232576040600319360112610232576020610c18602435610d52816102e4565b6004359060205263739094b1600c52600c1c6000526034600c205490565b3461023257610d7e36610c49565b6000903d15610da9575b60208273ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60205263739094b1600c525260206034600c2054605f1c38610d88565b9181601f840112156102325782359167ffffffffffffffff8311610232576020808501948460051b01011161023257565b346102325760206003193601126102325760043567ffffffffffffffff811161023257610e2b610019913690600401610dc6565b90611d29565b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102325760a06003193601126102325760043560843560ff8116810361023257610e8e611647565b610ea2826000526005602052604060002090565b80549069ffffffffffffffffffff821691821561118057600582019081544311611156576110f784610fed936002611111966110347f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede89a610fc76040516020810190610fb781610f8b8d8c73ffffffffffffffffffffffffffffffffffffffff6024359260501c1687917fffffffffffffffffffff00000000000000000000000000000000000000000000907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000603e959360601b16845260b01b166014830152601e8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610266565b5190209160643560443584611bae565b6000611006610fed600186015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b84547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168555955560019055565b0193611057610fed865473ffffffffffffffffffffffffffffffffffffffff1690565b331461112c57697fffffffffffffffffff9060011c1661108433600c1b6000526006602052604060002090565b61108f82825461163a565b90556110d66110ce6110be6110b8885473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526006602052604060002090565b91825461163a565b90555b835473ffffffffffffffffffffffffffffffffffffffff1690611c9c565b5473ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600355565b5061114433600c1b6000526006602052604060002090565b61114f83825461163a565b90556110d9565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610c6e928181520190610829565b346102325760406003193601126102325760043567ffffffffffffffff8111610232576111ec903690600401610302565b602435906111f9826102e4565b600091815191611208836122ff565b935b83811061121f576040518061097387826111aa565b8061124c8473ffffffffffffffffffffffffffffffffffffffff6112456001958761234e565b5116612273565b611256828861234e565b520161120a565b34610232576020610c1861127036610c49565b90612273565b346102325760406003193601126102325767ffffffffffffffff600435818111610232576112a8903690600401610302565b9060243590811161023257366023820112156102325780600401356112cc816102cc565b916112da6040519384610266565b81835260209160248385019160051b8301019136831161023257602401905b82821061130a576100198587611541565b83809161131684610538565b8152019101906112f9565b346102325760a06003193601126102325760043561133e816102e4565b6024359061134b826102e4565b6044359169ffffffffffffffffffff831683036102325767ffffffffffffffff9160643583811161023257611384903690600401610dc6565b9060843594851161023257610973956113a46113ac963690600401610dc6565b959094611793565b6040519081529081906020820190565b34610232576020600319360112610232576004356113d9816102e4565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361046d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1005b3461023257606060031936011261023257600435611449816102e4565b60243560443567ffffffffffffffff8111610232577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916114a2611494611529933690600401610dc6565b9061149d611647565b611d29565b6114ac84336122aa565b611533575b6114ed33600c1b85836b3fffffffffffffffffffffff6114e783859060205263739094b1600c52600c1c6000526034600c205490565b16612237565b6114f8813386611c9c565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600355005b61153c846116db565b6114b1565b9060009073ffffffffffffffffffffffffffffffffffffffff825416330361046d5782519182156115eb57815183036115de57602092919284818080970195019360051b0101925b838103611597575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191611589565b63ff633a3890526004601cfd5b63df95788390526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161163557565b6115f8565b9190820180921161163557565b600260035414611658576002600355565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d156001600051141716156116cd576000606052604052565b637939f4246000526004601cfd5b33600c1b6116ff82829060205263739094b1600c52600c1c6000526034600c205490565b908115610bbe57827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117489316919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b956117b89073ffffffffffffffffffffffffffffffffffffffff93949661149d611647565b16916117c76105d584876122aa565b611a60576117d58386612273565b9469ffffffffffffffffffff9182841691828810611a3657600c1b956117fc600454611627565b936005611813866000526005602052604060002090565b0154431115611a0c5761185b61183f888a9060205263739094b1600c52600c1c6000526034600c205490565b605f1c73ffffffffffffffffffffffffffffffffffffffff1690565b6118a561186a6002544361163a565b916118886118766102ac565b69ffffffffffffffffffff909a168a52565b73ffffffffffffffffffffffffffffffffffffffff166020890152565b73ffffffffffffffffffffffffffffffffffffffff881660408801523360608801526080870189905260a0870186905260c0870152821561191f5750611912979161190d9133916119078a6374dfee70600c52600c1c60005260206000205490565b91611aa7565b611fe2565b9061191d6001600355565b565b80925068056bc75e2d631000009150611942865169ffffffffffffffffffff1690565b1611611957575061195295611fe2565b611912565b61198861198361197433600c1b6000526006602052604060002090565b54670de0b6b3a7640000900490565b611b35565b816119a66119a0875169ffffffffffffffffffff1690565b92611a8a565b9116119081156119e9575b506119bf5761195295611fe2565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b845169d3c21bcecceda1000000925069ffffffffffffffffffff161611386119b1565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a76400009182810292818404149015171561163557565b73ffffffffffffffffffffffffffffffffffffffff8293941692611af9575b505003611acf57565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611b2a579290611b03565b509150503880611ac6565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102a7576020926000926040525190600154617530fa906000519115611ba057565b63e10bf1cc6000526004601cfd5b918254611c725760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611c65576060526040829052600c1b5415611c3d5750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611cd857603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611d245760051b0190565b611ce5565b6000905b828210611d4a575010611d3c57565b63dfb035c96000526004601cfd5b90611d6a611d59828585611d14565b356000526005602052604060002090565b90611d7482611f96565b6003820154600192611d9f610fed8583015473ffffffffffffffffffffffffffffffffffffffff1690565b906b3fffffffffffffffffffffff611dcd83859060205263739094b1600c52600c1c6000526034600c205490565b16926a52b7d2dcc80cd2e4000000611e0b611e04611df5855469ffffffffffffffffffff1690565b69ffffffffffffffffffff1690565b809661163a565b116106f857611ed693600293611e3a929060205263739094b1600c52600c1c6000526034600c20908154019055565b80547fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016815501611e826110b8825473ffffffffffffffffffffffffffffffffffffffff1690565b611ea0611e99826000526006602052604060002090565b5460011c90565b68056bc75e2d631000008111611f2c5750611ec86110f7916000526006602052604060002090565b68056bc75e2d631000009055565b7f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da573ffffffffffffffffffffffffffffffffffffffff611f17848888611d14565b60405190358152921691602090a20190611d2d565b90611f41906000526006602052604060002090565b556110f7565b338103611f88576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60058101544310611a0c575469ffffffffffffffffffff161561118057565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116355760010190565b9594906121c073ffffffffffffffffffffffffffffffffffffffff927f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949687600052600560205260406000209361207869ffffffffffffffffffff895116869069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60208801517fffff0000000000000000000000000000000000000000ffffffffffffffffffff7dffffffffffffffffffffffffffffffffffffffff0000000000000000000087549260501b1691161785556121316120ed60408a015173ffffffffffffffffffffffffffffffffffffffff1690565b600187019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b606088019a61219b6121578d5173ffffffffffffffffffffffffffffffffffffffff1690565b600288019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60808901958651600382015560a08a01516004820155600560c08b0151910155612237565b6121d36121ce600454611fb5565b600455565b61223261220b6121f887995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176122655760205263739094b1600c52600c1c6000526034600c20908154039055565b63ce3a3d376000526004601cfd5b600092913d15612281575050565b9091925060205263739094b1600c526000526034600c20546b3fffffffffffffffffffffff1690565b600092913d156122b8575050565b9091925060205263739094b1600c526000526034600c205460ff1c90565b6040516020810181811067ffffffffffffffff8211176102a75760405260008152906000368137565b90612309826102cc565b6123166040519182610266565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061234482946102cc565b0190602036910137565b8051821015611d245760209160051b010190565b908151156124b3576000809280519061237a826122ff565b92612384836122ff565b955b83811061239557505050509190565b8060036123b86123a76001948761234e565b516000526005602052604060002090565b01546123e9576123c8818561234e565b516123d3828861234e565b52826123df828a61234e565b5201925b92612386565b69ffffffffffffffffffff6124146124046123a7848861234e565b5469ffffffffffffffffffff1690565b1661244957612423818561234e565b5161242e828861234e565b5261244261243c828a61234e565b60039052565b01926123e3565b60056124586123a7838761234e565b015443111561248a5761246b818561234e565b51612476828861234e565b52612442612484828a61234e565b60029052565b612494818561234e565b5161249f828861234e565b526124426124ad828a61234e565b60019052565b90506124bd6122d6565b90610c6e6122d656fea26469706673582212201444924ada6389f6c030254fb9c91f76aaa6d4c9a8f3a0403af9786524e874a564736f6c63430008130033", + "deployedBytecode": "0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102065780630d2a2d441461020157806313af4035146101fc578063328a7181146101f7578063367821f0146101f2578063461f3120146101ac57806349ef8448146101ed5780634b2ae980146101e8578063574983c8146101e35780635fd8c710146101de57806369cc6af4146101d95780636d82d9e0146101d457806377cd38a4146101cf5780637f94f65d146101ca57806380e1d302146101c557806384ab1d28146101c05780638da5cb5b146101bb5780638db564c2146101b65780639872dbfe146101b157806398a26871146101ac5780639eee8d4b146101a7578063ad8f2eed146101a2578063b0983d391461019d578063c52164c614610198578063c593dfd814610193578063d1c070281461018e578063d4fac45d14610189578063d6e8b97314610184578063dc43221c1461017f578063f7d0e04b1461017a5763fb8c5ef00361000e5761142c565b6113bc565b611321565b611276565b61125d565b6111bb565b610e65565b610e31565b610df7565b610d70565b610d30565b610808565b610d12565b610cf4565b610cc0565b610c8a565b610c71565b610c20565b610be8565b610ad7565b610a97565b610a14565b6109b0565b610986565b6108eb565b610776565b610545565b610497565b61036a565b346102325760206003193601126102325760043560005260066020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102a757604052565b610237565b6040519060e0820182811067ffffffffffffffff8211176102a757604052565b67ffffffffffffffff81116102a75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361023257565b81601f8201121561023257803591610319836102cc565b926103276040519485610266565b808452602092838086019260051b820101928311610232578301905b828210610351575050505090565b838091833561035f816102e4565b815201910190610343565b34610232576020806003193601126102325760043567ffffffffffffffff81116102325761039c903690600401610302565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361046d57805181830192849160051b830181013d1515855b8115610439575b50505060405192818401908285525180915260408401949160005b828110610423577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b83518516875295810195928101926001016103f4565b90838260018298969499979951600c1b550190838210156104615791509593959492946103d2565b509593959492946103d9565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576004356104b4816102e4565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361046d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b60643590811515820361023257565b3590811515820361023257565b346102325760a060031936011261023257600435610562816102e4565b6024356bffffffffffffffffffffffff8116908181036102325760443590610589826102e4565b610591610529565b6084359373ffffffffffffffffffffffffffffffffffffffff8087169033600c1b9086161561074c576105d96105d58363cbc9d1c4600c526000526020600c205490565b1590565b610722576b3fffffffffffffffffffffff61060a83839060205263739094b1600c52600c1c6000526034600c205490565b16906a52b7d2dcc80cd2e4000000610622858461163a565b116106f857826106e39761069c9661066e89610693967f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf9d610662611647565b806106e8575b5061163a565b9060ff1b91605f1b1717919060205263739094b1600c52600c1c6000526034600c2055565b30903390611682565b6106a66001600355565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2005b6106f29033611f47565b38610668565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b3461023257602060031936011261023257600435600052600560205260e0604060002080549073ffffffffffffffffffffffffffffffffffffffff90816001820154168260028301541660038301549160056004850154940154946040519669ffffffffffffffffffff8116885260501c16602087015260408601526060850152608084015260a083015260c0820152f35b34610232576020600319360112610232576020600435546040519015158152f35b90815180825260208080930193019160005b828110610849575050505090565b83518552938101939281019260010161083b565b9061087090604083526040830190610829565b81810360209283015282518082529082019282019160009190825b82811061089a57505050505090565b909192939485516004808210156108bf5750815282019482019392919060010161088b565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610232576020806003193601126102325760043567ffffffffffffffff8111610232573660238201121561023257806004013590610929826102cc565b916109376040519384610266565b80835260248484019160051b8301019136831161023257602401905b8282106109775761096384612362565b906109736040519283928361085d565b0390f35b81358152908401908401610953565b346102325760206003193601126102325760206004356109a5816102e4565b60405190600c1b8152f35b346102325760206003193601126102325760043573ffffffffffffffffffffffffffffffffffffffff60005416330361046d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600255604051908152a1005b3461023257600080600319360112610a945773ffffffffffffffffffffffffffffffffffffffff815416330361046d57478180808084335af115610a87576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b34610232576020600319360112610232576020610acd600435610ab9816102e4565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3461023257604060031936011261023257600435610af4816102e4565b602435801515908181036102325733600c1b610b2684829060205263739094b1600c52600c1c6000526034600c205490565b918215610bbe57610b75927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869260ff1b911617919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff6040519216825260208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576020610c186004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461023257604060031936011261023257610019600435610c40816102e4565b60243590611f47565b600319604091011261023257600435610c61816102e4565b90602435610c6e816102e4565b90565b34610232576020610acd610c8436610c49565b906122aa565b3461023257602060031936011261023257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610232576000600319360112610232576020600454604051908152f35b34610232576000600319360112610232576020600254604051908152f35b34610232576040600319360112610232576020610c18602435610d52816102e4565b6004359060205263739094b1600c52600c1c6000526034600c205490565b3461023257610d7e36610c49565b6000903d15610da9575b60208273ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60205263739094b1600c525260206034600c2054605f1c38610d88565b9181601f840112156102325782359167ffffffffffffffff8311610232576020808501948460051b01011161023257565b346102325760206003193601126102325760043567ffffffffffffffff811161023257610e2b610019913690600401610dc6565b90611d29565b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102325760a06003193601126102325760043560843560ff8116810361023257610e8e611647565b610ea2826000526005602052604060002090565b80549069ffffffffffffffffffff821691821561118057600582019081544311611156576110f784610fed936002611111966110347f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede89a610fc76040516020810190610fb781610f8b8d8c73ffffffffffffffffffffffffffffffffffffffff6024359260501c1687917fffffffffffffffffffff00000000000000000000000000000000000000000000907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000603e959360601b16845260b01b166014830152601e8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610266565b5190209160643560443584611bae565b6000611006610fed600186015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b84547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168555955560019055565b0193611057610fed865473ffffffffffffffffffffffffffffffffffffffff1690565b331461112c57697fffffffffffffffffff9060011c1661108433600c1b6000526006602052604060002090565b61108f82825461163a565b90556110d66110ce6110be6110b8885473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526006602052604060002090565b91825461163a565b90555b835473ffffffffffffffffffffffffffffffffffffffff1690611c9c565b5473ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600355565b5061114433600c1b6000526006602052604060002090565b61114f83825461163a565b90556110d9565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610c6e928181520190610829565b346102325760406003193601126102325760043567ffffffffffffffff8111610232576111ec903690600401610302565b602435906111f9826102e4565b600091815191611208836122ff565b935b83811061121f576040518061097387826111aa565b8061124c8473ffffffffffffffffffffffffffffffffffffffff6112456001958761234e565b5116612273565b611256828861234e565b520161120a565b34610232576020610c1861127036610c49565b90612273565b346102325760406003193601126102325767ffffffffffffffff600435818111610232576112a8903690600401610302565b9060243590811161023257366023820112156102325780600401356112cc816102cc565b916112da6040519384610266565b81835260209160248385019160051b8301019136831161023257602401905b82821061130a576100198587611541565b83809161131684610538565b8152019101906112f9565b346102325760a06003193601126102325760043561133e816102e4565b6024359061134b826102e4565b6044359169ffffffffffffffffffff831683036102325767ffffffffffffffff9160643583811161023257611384903690600401610dc6565b9060843594851161023257610973956113a46113ac963690600401610dc6565b959094611793565b6040519081529081906020820190565b34610232576020600319360112610232576004356113d9816102e4565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361046d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1005b3461023257606060031936011261023257600435611449816102e4565b60243560443567ffffffffffffffff8111610232577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916114a2611494611529933690600401610dc6565b9061149d611647565b611d29565b6114ac84336122aa565b611533575b6114ed33600c1b85836b3fffffffffffffffffffffff6114e783859060205263739094b1600c52600c1c6000526034600c205490565b16612237565b6114f8813386611c9c565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600355005b61153c846116db565b6114b1565b9060009073ffffffffffffffffffffffffffffffffffffffff825416330361046d5782519182156115eb57815183036115de57602092919284818080970195019360051b0101925b838103611597575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191611589565b63ff633a3890526004601cfd5b63df95788390526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161163557565b6115f8565b9190820180921161163557565b600260035414611658576002600355565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d156001600051141716156116cd576000606052604052565b637939f4246000526004601cfd5b33600c1b6116ff82829060205263739094b1600c52600c1c6000526034600c205490565b908115610bbe57827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117489316919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b956117b89073ffffffffffffffffffffffffffffffffffffffff93949661149d611647565b16916117c76105d584876122aa565b611a60576117d58386612273565b9469ffffffffffffffffffff9182841691828810611a3657600c1b956117fc600454611627565b936005611813866000526005602052604060002090565b0154431115611a0c5761185b61183f888a9060205263739094b1600c52600c1c6000526034600c205490565b605f1c73ffffffffffffffffffffffffffffffffffffffff1690565b6118a561186a6002544361163a565b916118886118766102ac565b69ffffffffffffffffffff909a168a52565b73ffffffffffffffffffffffffffffffffffffffff166020890152565b73ffffffffffffffffffffffffffffffffffffffff881660408801523360608801526080870189905260a0870186905260c0870152821561191f5750611912979161190d9133916119078a6374dfee70600c52600c1c60005260206000205490565b91611aa7565b611fe2565b9061191d6001600355565b565b80925068056bc75e2d631000009150611942865169ffffffffffffffffffff1690565b1611611957575061195295611fe2565b611912565b61198861198361197433600c1b6000526006602052604060002090565b54670de0b6b3a7640000900490565b611b35565b816119a66119a0875169ffffffffffffffffffff1690565b92611a8a565b9116119081156119e9575b506119bf5761195295611fe2565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b845169d3c21bcecceda1000000925069ffffffffffffffffffff161611386119b1565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a76400009182810292818404149015171561163557565b73ffffffffffffffffffffffffffffffffffffffff8293941692611af9575b505003611acf57565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611b2a579290611b03565b509150503880611ac6565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102a7576020926000926040525190600154617530fa906000519115611ba057565b63e10bf1cc6000526004601cfd5b918254611c725760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611c65576060526040829052600c1b5415611c3d5750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611cd857603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611d245760051b0190565b611ce5565b6000905b828210611d4a575010611d3c57565b63dfb035c96000526004601cfd5b90611d6a611d59828585611d14565b356000526005602052604060002090565b90611d7482611f96565b6003820154600192611d9f610fed8583015473ffffffffffffffffffffffffffffffffffffffff1690565b906b3fffffffffffffffffffffff611dcd83859060205263739094b1600c52600c1c6000526034600c205490565b16926a52b7d2dcc80cd2e4000000611e0b611e04611df5855469ffffffffffffffffffff1690565b69ffffffffffffffffffff1690565b809661163a565b116106f857611ed693600293611e3a929060205263739094b1600c52600c1c6000526034600c20908154019055565b80547fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016815501611e826110b8825473ffffffffffffffffffffffffffffffffffffffff1690565b611ea0611e99826000526006602052604060002090565b5460011c90565b68056bc75e2d631000008111611f2c5750611ec86110f7916000526006602052604060002090565b68056bc75e2d631000009055565b7f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da573ffffffffffffffffffffffffffffffffffffffff611f17848888611d14565b60405190358152921691602090a20190611d2d565b90611f41906000526006602052604060002090565b556110f7565b338103611f88576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60058101544310611a0c575469ffffffffffffffffffff161561118057565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116355760010190565b9594906121c073ffffffffffffffffffffffffffffffffffffffff927f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949687600052600560205260406000209361207869ffffffffffffffffffff895116869069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60208801517fffff0000000000000000000000000000000000000000ffffffffffffffffffff7dffffffffffffffffffffffffffffffffffffffff0000000000000000000087549260501b1691161785556121316120ed60408a015173ffffffffffffffffffffffffffffffffffffffff1690565b600187019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b606088019a61219b6121578d5173ffffffffffffffffffffffffffffffffffffffff1690565b600288019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60808901958651600382015560a08a01516004820155600560c08b0151910155612237565b6121d36121ce600454611fb5565b600455565b61223261220b6121f887995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176122655760205263739094b1600c52600c1c6000526034600c20908154039055565b63ce3a3d376000526004601cfd5b600092913d15612281575050565b9091925060205263739094b1600c526000526034600c20546b3fffffffffffffffffffffff1690565b600092913d156122b8575050565b9091925060205263739094b1600c526000526034600c205460ff1c90565b6040516020810181811067ffffffffffffffff8211176102a75760405260008152906000368137565b90612309826102cc565b6123166040519182610266565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061234482946102cc565b0190602036910137565b8051821015611d245760209160051b010190565b908151156124b3576000809280519061237a826122ff565b92612384836122ff565b955b83811061239557505050509190565b8060036123b86123a76001948761234e565b516000526005602052604060002090565b01546123e9576123c8818561234e565b516123d3828861234e565b52826123df828a61234e565b5201925b92612386565b69ffffffffffffffffffff6124146124046123a7848861234e565b5469ffffffffffffffffffff1690565b1661244957612423818561234e565b5161242e828861234e565b5261244261243c828a61234e565b60039052565b01926123e3565b60056124586123a7838761234e565b015443111561248a5761246b818561234e565b51612476828861234e565b52612442612484828a61234e565b60029052565b612494818561234e565b5161249f828861234e565b526124426124ad828a61234e565b60019052565b90506124bd6122d6565b90610c6e6122d656fea26469706673582212201444924ada6389f6c030254fb9c91f76aaa6d4c9a8f3a0403af9786524e874a564736f6c63430008130033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/core/DataTypes.sol b/contracts/core/DataTypes.sol index 564fb48..8db52ba 100644 --- a/contracts/core/DataTypes.sol +++ b/contracts/core/DataTypes.sol @@ -3,22 +3,15 @@ pragma solidity 0.8.19; library DataTypes { struct Lock { + uint80 amount; + uint160 pixTarget; + address token; + /// @dev Amount to be tranfered via PIX. + address buyerAddress; uint256 sellerKey; uint256 counter; /// @dev If not paid at this block will be expired. uint256 expirationBlock; - uint160 pixTarget; - /// @dev Amount to be paid for relayer. - uint80 relayerPremium; - /// @dev Where the tokens are sent the when order gets validated. - /// @dev Amount to be tranfered via PIX. - uint80 amount; - address buyerAddress; - /// @dev Relayer address (msg.sender) that facilitated this transaction. - /// @dev Relayer's target address that receives `relayerPremium` funds. - /// @dev Reputation points accruer. - address relayerAddress; - address token; } // prettier-ignore diff --git a/contracts/p2pix.sol b/contracts/p2pix.sol index 6e7589e..52264be 100644 --- a/contracts/p2pix.sol +++ b/contracts/p2pix.sol @@ -144,8 +144,6 @@ contract P2PIX is BaseUtils, ReentrancyGuard { /// @dev There can only exist a lock per each `_amount` partitioned /// from the total `remaining` value. /// @dev Locks can only be performed in valid orders. - /// @param _buyerAddress The address of the buyer of a `_depositID`. - /// @param _relayerPremium The refund/premium owed to a relayer. /// @param _amount The deposit's remaining amount wished to be locked. /// @param merkleProof This value should be: /// - Provided as a pass if the `msg.sender` is in the seller's allowlist; @@ -157,8 +155,6 @@ contract P2PIX is BaseUtils, ReentrancyGuard { function lock( address _seller, address _token, - address _buyerAddress, - uint80 _relayerPremium, uint80 _amount, bytes32[] calldata merkleProof, uint256[] calldata expiredLocks @@ -180,19 +176,17 @@ contract P2PIX is BaseUtils, ReentrancyGuard { ) revert NotExpired(); DT.Lock memory l = DT.Lock( + _amount, + uint160(sellerBalance(k, t) >> BITPOS_PIXTARGET), + address(t), + msg.sender, k, cCounter, - (block.number + defaultLockBlocks), - uint160(sellerBalance(k, t) >> BITPOS_PIXTARGET), - _relayerPremium, - _amount, - _buyerAddress, - msg.sender, - address(t) + (block.number + defaultLockBlocks) ); if (merkleProof.length != 0) { - _merkleVerify( merkleProof, sellerAllowList(k), msg.sender); + _merkleVerify(merkleProof, sellerAllowList(k), msg.sender); lockID = _addLock(bal, _amount, cCounter, l, t, k); } else { @@ -247,53 +241,28 @@ contract P2PIX is BaseUtils, ReentrancyGuard { ERC20 t = ERC20(l.token); + /// @todo shouldi cache it tho: would it be cheaper to just keep reading from storage? // We cache values before zeroing them out. uint256 lockAmount = l.amount; - uint256 totalAmount = (lockAmount - l.relayerPremium); + // uint256 totalAmount = (lockAmount - l.relayerPremium); l.amount = 0; l.expirationBlock = 0; _setUsedTransactions(message); - if (msg.sender != l.relayerAddress) { - userRecord[_castAddrToKey(msg.sender)] += l - .relayerPremium; - userRecord[ - _castAddrToKey(l.relayerAddress) - ] += lockAmount; + if (msg.sender != l.buyerAddress) { + userRecord[_castAddrToKey(msg.sender)] += (lockAmount >> 1); + userRecord[_castAddrToKey(l.buyerAddress)] += (lockAmount >> 1); } else { - userRecord[_castAddrToKey(msg.sender)] += (l - .relayerPremium + lockAmount); + userRecord[_castAddrToKey(msg.sender)] += lockAmount; } SafeTransferLib.safeTransfer( t, l.buyerAddress, - totalAmount + lockAmount ); - // Method doesn't check for zero address. - if (l.relayerPremium != 0) { - if (msg.sender != l.relayerAddress) { - SafeTransferLib.safeTransfer( - t, - l.relayerAddress, - (l.relayerPremium >> 1) - ); - SafeTransferLib.safeTransfer( - t, - msg.sender, - (l.relayerPremium >> 1) - ); - } else { - SafeTransferLib.safeTransfer( - t, - msg.sender, - l.relayerPremium - ); - } - } - emit LockReleased(l.buyerAddress, lockID, lockAmount); } @@ -314,7 +283,8 @@ contract P2PIX is BaseUtils, ReentrancyGuard { _notExpired(l); - uint256 _sellerBalance = sellerBalance(l.sellerKey, ERC20(l.token)) & BITMASK_SB_ENTRY; + uint256 _sellerBalance = + sellerBalance(l.sellerKey, ERC20(l.token)) & BITMASK_SB_ENTRY; if ((_sellerBalance + l.amount) > MAXBALANCE_UPPERBOUND) revert MaxBalExceeded(); @@ -324,7 +294,7 @@ contract P2PIX is BaseUtils, ReentrancyGuard { l.amount = 0; uint256 userKey = _castAddrToKey( - l.relayerAddress + l.buyerAddress ); uint256 _newUserRecord = (userRecord[userKey] >> 1); @@ -429,6 +399,8 @@ contract P2PIX is BaseUtils, ReentrancyGuard { function _addLock( uint256 _bal, + /// @todo cant i simply get the amount via the lock in storage? would it be cheaper than using + /// a function parameter? uint256 _amount, uint256 _lockID, DT.Lock memory _l, diff --git a/src/types/factories/p2pix.sol/P2PIX__factory.ts b/src/types/factories/p2pix.sol/P2PIX__factory.ts index 6e504c2..aad3268 100644 --- a/src/types/factories/p2pix.sol/P2PIX__factory.ts +++ b/src/types/factories/p2pix.sol/P2PIX__factory.ts @@ -650,16 +650,6 @@ const _abi = [ name: "_token", type: "address", }, - { - internalType: "address", - name: "_buyerAddress", - type: "address", - }, - { - internalType: "uint80", - name: "_relayerPremium", - type: "uint80", - }, { internalType: "uint80", name: "_amount", @@ -710,6 +700,26 @@ const _abi = [ ], name: "mapLocks", outputs: [ + { + internalType: "uint80", + name: "amount", + type: "uint80", + }, + { + internalType: "uint160", + name: "pixTarget", + type: "uint160", + }, + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "buyerAddress", + type: "address", + }, { internalType: "uint256", name: "sellerKey", @@ -725,36 +735,6 @@ const _abi = [ name: "expirationBlock", type: "uint256", }, - { - internalType: "uint160", - name: "pixTarget", - type: "uint160", - }, - { - internalType: "uint80", - name: "relayerPremium", - type: "uint80", - }, - { - internalType: "uint80", - name: "amount", - type: "uint80", - }, - { - internalType: "address", - name: "buyerAddress", - type: "address", - }, - { - internalType: "address", - name: "relayerAddress", - type: "address", - }, - { - internalType: "address", - name: "token", - type: "address", - }, ], stateMutability: "view", type: "function", @@ -1074,7 +1054,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405262002bf280380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516127b09081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816002556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600355565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102065780630d2a2d441461020157806313af4035146101fc5780632cc0f905146101f7578063328a7181146101f2578063367821f0146101ed578063461f3120146101a757806349ef8448146101e85780634b2ae980146101e3578063574983c8146101de5780635fd8c710146101d957806369cc6af4146101d45780636d82d9e0146101cf57806377cd38a4146101ca5780637f94f65d146101c557806380e1d302146101c057806384ab1d28146101bb5780638da5cb5b146101b65780638db564c2146101b15780639872dbfe146101ac57806398a26871146101a75780639eee8d4b146101a2578063ad8f2eed1461019d578063b0983d3914610198578063c52164c614610193578063c593dfd81461018e578063d1c0702814610189578063d4fac45d14610184578063d6e8b9731461017f578063f7d0e04b1461017a5763fb8c5ef00361000e576115d8565b611568565b6114bd565b6114a4565b611402565b610f65565b610f31565b610ef7565b610ea1565b610e61565b61093d565b610e43565b610e25565b610df1565b610dbb565b610da2565b610d51565b610d19565b610c08565b610bc8565b610b45565b610ae1565b610ab7565b610a20565b610882565b610651565b61058d565b610498565b61036b565b346102325760206003193601126102325760043560005260066020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102a757604052565b610237565b60405190610120820182811067ffffffffffffffff8211176102a757604052565b67ffffffffffffffff81116102a75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361023257565b81601f820112156102325780359161031a836102cd565b926103286040519485610266565b808452602092838086019260051b820101928311610232578301905b828210610352575050505090565b8380918335610360816102e5565b815201910190610344565b34610232576020806003193601126102325760043567ffffffffffffffff81116102325761039d903690600401610303565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361046e57805181830192849160051b830181013d1515855b811561043a575b50505060405192818401908285525180915260408401949160005b828110610424577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b83518516875295810195928101926001016103f5565b90838260018298969499979951600c1b550190838210156104625791509593959492946103d3565b509593959492946103da565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576004356104b5816102e5565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361046e577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b6064359069ffffffffffffffffffff8216820361023257565b6084359069ffffffffffffffffffff8216820361023257565b9181601f840112156102325782359167ffffffffffffffff8311610232576020808501948460051b01011161023257565b346102325760e0600319360112610232576004356105aa816102e5565b602435906105b7826102e5565b604435916105c4836102e5565b6105cc61052a565b916105d5610543565b67ffffffffffffffff9360a435858111610232576105f790369060040161055c565b92909160c435968711610232576106319761061961062198369060040161055c565b97909661193f565b6040519081529081906020820190565b0390f35b60643590811515820361023257565b3590811515820361023257565b346102325760a06003193601126102325760043561066e816102e5565b6024356bffffffffffffffffffffffff8116908181036102325760443590610695826102e5565b61069d610635565b6084359373ffffffffffffffffffffffffffffffffffffffff8087169033600c1b90861615610858576106e56106e18363cbc9d1c4600c526000526020600c205490565b1590565b61082e576b3fffffffffffffffffffffff61071683839060205263739094b1600c52600c1c6000526034600c205490565b16906a52b7d2dcc80cd2e400000061072e85846117e6565b1161080457826107ef976107a89661077a8961079f967f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf9d61076e6117f3565b806107f4575b506117e6565b9060ff1b91605f1b1717919060205263739094b1600c52600c1c6000526034600c2055565b3090339061182e565b6107b26001600355565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2005b6107fe9033612171565b38610774565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b346102325760206003193601126102325760048035600090815260056020818152604092839020805460018201546002830154600384015497840154958401546006909401548751938452948301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff808616606086015269ffffffffffffffffffff60a096871c8116608087015284169585019590955260509290921c841660c084015290831660e08301529190911661010082015261012090f35b34610232576020600319360112610232576020600435546040519015158152f35b90815180825260208080930193019160005b82811061097e575050505090565b835185529381019392810192600101610970565b906109a59060408352604083019061095e565b81810360209283015282518082529082019282019160009190825b8281106109cf57505050505090565b909192939485516004808210156109f4575081528201948201939291906001016109c0565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610232576020806003193601126102325760043567ffffffffffffffff8111610232573660238201121561023257806004013590610a5e826102cd565b91610a6c6040519384610266565b80835260248484019160051b8301019136831161023257602401905b828210610aa857610a9884612616565b9061063160405192839283610992565b81358152908401908401610a88565b34610232576020600319360112610232576020600435610ad6816102e5565b60405190600c1b8152f35b346102325760206003193601126102325760043573ffffffffffffffffffffffffffffffffffffffff60005416330361046e576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600255604051908152a1005b3461023257600080600319360112610bc55773ffffffffffffffffffffffffffffffffffffffff815416330361046e57478180808084335af115610bb8576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b34610232576020600319360112610232576020610bfe600435610bea816102e5565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3461023257604060031936011261023257600435610c25816102e5565b602435801515908181036102325733600c1b610c5784829060205263739094b1600c52600c1c6000526034600c205490565b918215610cef57610ca6927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869260ff1b911617919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff6040519216825260208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576020610d496004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461023257604060031936011261023257610019600435610d71816102e5565b60243590612171565b600319604091011261023257600435610d92816102e5565b90602435610d9f816102e5565b90565b34610232576020610bfe610db536610d7a565b9061255e565b3461023257602060031936011261023257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610232576000600319360112610232576020600454604051908152f35b34610232576000600319360112610232576020600254604051908152f35b34610232576040600319360112610232576020610d49602435610e83816102e5565b6004359060205263739094b1600c52600c1c6000526034600c205490565b3461023257610eaf36610d7a565b6000903d15610eda575b60208273ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60205263739094b1600c525260206034600c2054605f1c38610eb9565b346102325760206003193601126102325760043567ffffffffffffffff811161023257610f2b61001991369060040161055c565b90611f17565b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102325760a06003193601126102325760043560843560ff8116810361023257610f8e6117f3565b610fa2826000526005602052604060002090565b60048101805469ffffffffffffffffffff169269ffffffffffffffffffff918285169384156113c75760028101958654431161139d577f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede89661123660058461115b61110998600061112d8d6112789d6110e560036110d59d019b6110a98d549e8f604051928391602083019573ffffffffffffffffffffffffffffffffffffffff602435921687917fffffffffffffffffffff00000000000000000000000000000000000000000000907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000603e959360601b16845260b01b166014830152601e8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610266565b5190209560643560443588611d9c565b611122611109600689015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b9b60a01c1690611d8f565b8a547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168b55965560019055565b019161117e611109845473ffffffffffffffffffffffffffffffffffffffff1690565b33146113585783546111a99060a01c69ffffffffffffffffffff165b69ffffffffffffffffffff1690565b6111cb6111c333600c1b6000526006602052604060002090565b9182546117e6565b90556112076111f76111f1855473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526006602052604060002090565b6112128a82546117e6565b90555b855460501c73ffffffffffffffffffffffffffffffffffffffff1685611e8a565b81546112509060a01c69ffffffffffffffffffff1661119a565b80611293575b505050505473ffffffffffffffffffffffffffffffffffffffff9060501c1690565b60408051948552602085019290925292a26100196001600355565b6112b4611109835473ffffffffffffffffffffffffffffffffffffffff1690565b3314611345575061119a61130861133c94936113216112ea611334955473ffffffffffffffffffffffffffffffffffffffff1690565b61131a61119a611308855469ffffffffffffffffffff9060a01c1690565b60011c697fffffffffffffffffff1690565b9087611e8a565b5460a01c69ffffffffffffffffffff1690565b903390611e8a565b38808080611256565b915050611353913390611e8a565b61133c565b61137c8961137761119a875469ffffffffffffffffffff9060a01c1690565b6117e6565b6113966111c333600c1b6000526006602052604060002090565b9055611215565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610d9f92818152019061095e565b346102325760406003193601126102325760043567ffffffffffffffff811161023257611433903690600401610303565b60243590611440826102e5565b60009181519161144f836125b3565b935b838110611466576040518061063187826113f1565b806114938473ffffffffffffffffffffffffffffffffffffffff61148c60019587612602565b5116612527565b61149d8288612602565b5201611451565b34610232576020610d496114b736610d7a565b90612527565b346102325760406003193601126102325767ffffffffffffffff600435818111610232576114ef903690600401610303565b906024359081116102325736602382011215610232578060040135611513816102cd565b916115216040519384610266565b81835260209160248385019160051b8301019136831161023257602401905b8282106115515761001985876116ed565b83809161155d84610644565b815201910190611540565b3461023257602060031936011261023257600435611585816102e5565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361046e57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1005b34610232576060600319360112610232576004356115f5816102e5565b60243560443567ffffffffffffffff8111610232577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e9161164e6116406116d593369060040161055c565b906116496117f3565b611f17565b611658843361255e565b6116df575b61169933600c1b85836b3fffffffffffffffffffffff61169383859060205263739094b1600c52600c1c6000526034600c205490565b166124eb565b6116a4813386611e8a565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600355005b6116e884611887565b61165d565b9060009073ffffffffffffffffffffffffffffffffffffffff825416330361046e578251918215611797578151830361178a57602092919284818080970195019360051b0101925b838103611743575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191611735565b63ff633a3890526004601cfd5b63df95788390526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116117e157565b6117a4565b919082018092116117e157565b600260035414611804576002600355565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d15600160005114171615611879576000606052604052565b637939f4246000526004601cfd5b33600c1b6118ab82829060205263739094b1600c52600c1c6000526034600c205490565b908115610cef57827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6118f49316919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9294976119669073ffffffffffffffffffffffffffffffffffffffff9395986116496117f3565b16936119756106e1868461255e565b611c41576119838583612527565b9669ffffffffffffffffffff9687811693848a10611c1757600c1b976119aa6004546117d3565b9560026119c1886000526005602052604060002090565b0154431115611bed576002546119d790436117e6565b976119f88a8c9060205263739094b1600c52600c1c6000526034600c205490565b605f1c611a189073ffffffffffffffffffffffffffffffffffffffff1690565b611a206102ac565b8c8152602081018a9052604081019a909a5273ffffffffffffffffffffffffffffffffffffffff1660608a015269ffffffffffffffffffff16608089015260a0880192611a7990849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff1660c08801523360e088015273ffffffffffffffffffffffffffffffffffffffff88166101008801528315611afd575050611af09791611aeb913391611ae58a6374dfee70600c52600c1c60005260206000205490565b91611c88565b61220f565b90611afb6001600355565b565b819350809250611b2168056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611b37575050611b329561220f565b611af0565b611b68611b63611b5433600c1b6000526006602052604060002090565b54670de0b6b3a7640000900490565b611d16565b81611b86611b80855169ffffffffffffffffffff1690565b92611c6b565b911611918215611bca575b5050611ba057611b329561220f565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611b91565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156117e157565b73ffffffffffffffffffffffffffffffffffffffff8293941692611cda575b505003611cb057565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611d0b579290611ce4565b509150503880611ca7565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102a7576020926000926040525190600154617530fa906000519115611d8157565b63e10bf1cc6000526004601cfd5b919082039182116117e157565b918254611e605760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611e53576060526040829052600c1b5415611e2b5750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611ec657603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611f125760051b0190565b611ed3565b6000905b828210611f38575010611f2a57565b63dfb035c96000526004601cfd5b90611f58611f47828585611f02565b356000526005602052604060002090565b611f61816121c0565b805490611f88611109600683015473ffffffffffffffffffffffffffffffffffffffff1690565b6b3fffffffffffffffffffffff611fb582859060205263739094b1600c52600c1c6000526034600c205490565b1690600493848401946a52b7d2dcc80cd2e4000000611feb611fe461119a895469ffffffffffffffffffff1690565b80966117e6565b11612149575060056120d8946120266001989795612067956111f1959060205263739094b1600c52600c1c6000526034600c20908154019055565b84547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168555015473ffffffffffffffffffffffffffffffffffffffff1690565b61208561207e826000526006602052604060002090565b5460011c90565b68056bc75e2d63100000811161212e57506120ad6120bb916000526006602052604060002090565b68056bc75e2d631000009055565b5460501c73ffffffffffffffffffffffffffffffffffffffff1690565b7f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da573ffffffffffffffffffffffffffffffffffffffff612119848888611f02565b60405190358152921691602090a20190611f1b565b90612143906000526006602052604060002090565b556120bb565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b3381036121b2576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611bed576004015469ffffffffffffffffffff16156113c757565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117e15760010190565b9095949391938460005260056020526040600020928451845560208501516001850155604085015160028501556003840160608601516122629073ffffffffffffffffffffffffffffffffffffffff1690565b8154608088015173ffffffffffffffffffffffffffffffffffffffff929092167fffff0000000000000000000000000000000000000000000000000000000000009091161760a091821b7dffffffffffffffffffff0000000000000000000000000000000000000000161790915585018051600486019991959069ffffffffffffffffffff168a547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001669ffffffffffffffffffff909116178a5560c08701998a516123419073ffffffffffffffffffffffffffffffffffffffff1690565b81547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff000000000000000000001617905560e087015173ffffffffffffffffffffffffffffffffffffffff1660058201906123f2919073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b61010087015173ffffffffffffffffffffffffffffffffffffffff169060060190612457919073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b612460936124eb565b60045461246c906121e2565b60045582945161248f9073ffffffffffffffffffffffffffffffffffffffff1690565b915190516040805192835269ffffffffffffffffffff909116602083015273ffffffffffffffffffffffffffffffffffffffff909216917f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea6591a3565b9291909280848103119015176125195760205263739094b1600c52600c1c6000526034600c20908154039055565b63ce3a3d376000526004601cfd5b600092913d15612535575050565b9091925060205263739094b1600c526000526034600c20546b3fffffffffffffffffffffff1690565b600092913d1561256c575050565b9091925060205263739094b1600c526000526034600c205460ff1c90565b6040516020810181811067ffffffffffffffff8211176102a75760405260008152906000368137565b906125bd826102cd565b6125ca6040519182610266565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125f882946102cd565b0190602036910137565b8051821015611f125760209160051b010190565b90815115612767576000809280519061262e826125b3565b92612638836125b3565b955b83811061264957505050509190565b8061266a61265960019386612602565b516000526005602052604060002090565b5461269a576126798185612602565b516126848288612602565b5282612690828a612602565b5201925b9261263a565b69ffffffffffffffffffff6126c860046126b76126598589612602565b015469ffffffffffffffffffff1690565b166126fd576126d78185612602565b516126e28288612602565b526126f66126f0828a612602565b60039052565b0192612694565b600261270c6126598387612602565b015443111561273e5761271f8185612602565b5161272a8288612602565b526126f6612738828a612602565b60029052565b6127488185612602565b516127538288612602565b526126f6612761828a612602565b60019052565b905061277161258a565b90610d9f61258a56fea26469706673582212203e8aba08cc8e47b6111780acdb9c2bff6dec6f7ca5f953c7cbc481f238b3d8fd64736f6c63430008130033"; + "0x60806040526200293e80380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516124fc9081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816002556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600355565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102065780630d2a2d441461020157806313af4035146101fc578063328a7181146101f7578063367821f0146101f2578063461f3120146101ac57806349ef8448146101ed5780634b2ae980146101e8578063574983c8146101e35780635fd8c710146101de57806369cc6af4146101d95780636d82d9e0146101d457806377cd38a4146101cf5780637f94f65d146101ca57806380e1d302146101c557806384ab1d28146101c05780638da5cb5b146101bb5780638db564c2146101b65780639872dbfe146101b157806398a26871146101ac5780639eee8d4b146101a7578063ad8f2eed146101a2578063b0983d391461019d578063c52164c614610198578063c593dfd814610193578063d1c070281461018e578063d4fac45d14610189578063d6e8b97314610184578063dc43221c1461017f578063f7d0e04b1461017a5763fb8c5ef00361000e5761142c565b6113bc565b611321565b611276565b61125d565b6111bb565b610e65565b610e31565b610df7565b610d70565b610d30565b610808565b610d12565b610cf4565b610cc0565b610c8a565b610c71565b610c20565b610be8565b610ad7565b610a97565b610a14565b6109b0565b610986565b6108eb565b610776565b610545565b610497565b61036a565b346102325760206003193601126102325760043560005260066020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102a757604052565b610237565b6040519060e0820182811067ffffffffffffffff8211176102a757604052565b67ffffffffffffffff81116102a75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361023257565b81601f8201121561023257803591610319836102cc565b926103276040519485610266565b808452602092838086019260051b820101928311610232578301905b828210610351575050505090565b838091833561035f816102e4565b815201910190610343565b34610232576020806003193601126102325760043567ffffffffffffffff81116102325761039c903690600401610302565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361046d57805181830192849160051b830181013d1515855b8115610439575b50505060405192818401908285525180915260408401949160005b828110610423577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b83518516875295810195928101926001016103f4565b90838260018298969499979951600c1b550190838210156104615791509593959492946103d2565b509593959492946103d9565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576004356104b4816102e4565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361046d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b60643590811515820361023257565b3590811515820361023257565b346102325760a060031936011261023257600435610562816102e4565b6024356bffffffffffffffffffffffff8116908181036102325760443590610589826102e4565b610591610529565b6084359373ffffffffffffffffffffffffffffffffffffffff8087169033600c1b9086161561074c576105d96105d58363cbc9d1c4600c526000526020600c205490565b1590565b610722576b3fffffffffffffffffffffff61060a83839060205263739094b1600c52600c1c6000526034600c205490565b16906a52b7d2dcc80cd2e4000000610622858461163a565b116106f857826106e39761069c9661066e89610693967f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf9d610662611647565b806106e8575b5061163a565b9060ff1b91605f1b1717919060205263739094b1600c52600c1c6000526034600c2055565b30903390611682565b6106a66001600355565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2005b6106f29033611f47565b38610668565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b3461023257602060031936011261023257600435600052600560205260e0604060002080549073ffffffffffffffffffffffffffffffffffffffff90816001820154168260028301541660038301549160056004850154940154946040519669ffffffffffffffffffff8116885260501c16602087015260408601526060850152608084015260a083015260c0820152f35b34610232576020600319360112610232576020600435546040519015158152f35b90815180825260208080930193019160005b828110610849575050505090565b83518552938101939281019260010161083b565b9061087090604083526040830190610829565b81810360209283015282518082529082019282019160009190825b82811061089a57505050505090565b909192939485516004808210156108bf5750815282019482019392919060010161088b565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610232576020806003193601126102325760043567ffffffffffffffff8111610232573660238201121561023257806004013590610929826102cc565b916109376040519384610266565b80835260248484019160051b8301019136831161023257602401905b8282106109775761096384612362565b906109736040519283928361085d565b0390f35b81358152908401908401610953565b346102325760206003193601126102325760206004356109a5816102e4565b60405190600c1b8152f35b346102325760206003193601126102325760043573ffffffffffffffffffffffffffffffffffffffff60005416330361046d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600255604051908152a1005b3461023257600080600319360112610a945773ffffffffffffffffffffffffffffffffffffffff815416330361046d57478180808084335af115610a87576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b34610232576020600319360112610232576020610acd600435610ab9816102e4565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3461023257604060031936011261023257600435610af4816102e4565b602435801515908181036102325733600c1b610b2684829060205263739094b1600c52600c1c6000526034600c205490565b918215610bbe57610b75927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869260ff1b911617919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff6040519216825260208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610232576020600319360112610232576020610c186004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461023257604060031936011261023257610019600435610c40816102e4565b60243590611f47565b600319604091011261023257600435610c61816102e4565b90602435610c6e816102e4565b90565b34610232576020610acd610c8436610c49565b906122aa565b3461023257602060031936011261023257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610232576000600319360112610232576020600454604051908152f35b34610232576000600319360112610232576020600254604051908152f35b34610232576040600319360112610232576020610c18602435610d52816102e4565b6004359060205263739094b1600c52600c1c6000526034600c205490565b3461023257610d7e36610c49565b6000903d15610da9575b60208273ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60205263739094b1600c525260206034600c2054605f1c38610d88565b9181601f840112156102325782359167ffffffffffffffff8311610232576020808501948460051b01011161023257565b346102325760206003193601126102325760043567ffffffffffffffff811161023257610e2b610019913690600401610dc6565b90611d29565b3461023257600060031936011261023257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102325760a06003193601126102325760043560843560ff8116810361023257610e8e611647565b610ea2826000526005602052604060002090565b80549069ffffffffffffffffffff821691821561118057600582019081544311611156576110f784610fed936002611111966110347f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede89a610fc76040516020810190610fb781610f8b8d8c73ffffffffffffffffffffffffffffffffffffffff6024359260501c1687917fffffffffffffffffffff00000000000000000000000000000000000000000000907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000603e959360601b16845260b01b166014830152601e8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610266565b5190209160643560443584611bae565b6000611006610fed600186015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b84547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000168555955560019055565b0193611057610fed865473ffffffffffffffffffffffffffffffffffffffff1690565b331461112c57697fffffffffffffffffff9060011c1661108433600c1b6000526006602052604060002090565b61108f82825461163a565b90556110d66110ce6110be6110b8885473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526006602052604060002090565b91825461163a565b90555b835473ffffffffffffffffffffffffffffffffffffffff1690611c9c565b5473ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600355565b5061114433600c1b6000526006602052604060002090565b61114f83825461163a565b90556110d9565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610c6e928181520190610829565b346102325760406003193601126102325760043567ffffffffffffffff8111610232576111ec903690600401610302565b602435906111f9826102e4565b600091815191611208836122ff565b935b83811061121f576040518061097387826111aa565b8061124c8473ffffffffffffffffffffffffffffffffffffffff6112456001958761234e565b5116612273565b611256828861234e565b520161120a565b34610232576020610c1861127036610c49565b90612273565b346102325760406003193601126102325767ffffffffffffffff600435818111610232576112a8903690600401610302565b9060243590811161023257366023820112156102325780600401356112cc816102cc565b916112da6040519384610266565b81835260209160248385019160051b8301019136831161023257602401905b82821061130a576100198587611541565b83809161131684610538565b8152019101906112f9565b346102325760a06003193601126102325760043561133e816102e4565b6024359061134b826102e4565b6044359169ffffffffffffffffffff831683036102325767ffffffffffffffff9160643583811161023257611384903690600401610dc6565b9060843594851161023257610973956113a46113ac963690600401610dc6565b959094611793565b6040519081529081906020820190565b34610232576020600319360112610232576004356113d9816102e4565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361046d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360015560405191168152a1005b3461023257606060031936011261023257600435611449816102e4565b60243560443567ffffffffffffffff8111610232577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916114a2611494611529933690600401610dc6565b9061149d611647565b611d29565b6114ac84336122aa565b611533575b6114ed33600c1b85836b3fffffffffffffffffffffff6114e783859060205263739094b1600c52600c1c6000526034600c205490565b16612237565b6114f8813386611c9c565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600355005b61153c846116db565b6114b1565b9060009073ffffffffffffffffffffffffffffffffffffffff825416330361046d5782519182156115eb57815183036115de57602092919284818080970195019360051b0101925b838103611597575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191611589565b63ff633a3890526004601cfd5b63df95788390526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161163557565b6115f8565b9190820180921161163557565b600260035414611658576002600355565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d156001600051141716156116cd576000606052604052565b637939f4246000526004601cfd5b33600c1b6116ff82829060205263739094b1600c52600c1c6000526034600c205490565b908115610bbe57827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6117489316919060205263739094b1600c52600c1c6000526034600c2055565b73ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b956117b89073ffffffffffffffffffffffffffffffffffffffff93949661149d611647565b16916117c76105d584876122aa565b611a60576117d58386612273565b9469ffffffffffffffffffff9182841691828810611a3657600c1b956117fc600454611627565b936005611813866000526005602052604060002090565b0154431115611a0c5761185b61183f888a9060205263739094b1600c52600c1c6000526034600c205490565b605f1c73ffffffffffffffffffffffffffffffffffffffff1690565b6118a561186a6002544361163a565b916118886118766102ac565b69ffffffffffffffffffff909a168a52565b73ffffffffffffffffffffffffffffffffffffffff166020890152565b73ffffffffffffffffffffffffffffffffffffffff881660408801523360608801526080870189905260a0870186905260c0870152821561191f5750611912979161190d9133916119078a6374dfee70600c52600c1c60005260206000205490565b91611aa7565b611fe2565b9061191d6001600355565b565b80925068056bc75e2d631000009150611942865169ffffffffffffffffffff1690565b1611611957575061195295611fe2565b611912565b61198861198361197433600c1b6000526006602052604060002090565b54670de0b6b3a7640000900490565b611b35565b816119a66119a0875169ffffffffffffffffffff1690565b92611a8a565b9116119081156119e9575b506119bf5761195295611fe2565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b845169d3c21bcecceda1000000925069ffffffffffffffffffff161611386119b1565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a76400009182810292818404149015171561163557565b73ffffffffffffffffffffffffffffffffffffffff8293941692611af9575b505003611acf57565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611b2a579290611b03565b509150503880611ac6565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102a7576020926000926040525190600154617530fa906000519115611ba057565b63e10bf1cc6000526004601cfd5b918254611c725760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611c65576060526040829052600c1b5415611c3d5750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611cd857603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190811015611d245760051b0190565b611ce5565b6000905b828210611d4a575010611d3c57565b63dfb035c96000526004601cfd5b90611d6a611d59828585611d14565b356000526005602052604060002090565b90611d7482611f96565b6003820154600192611d9f610fed8583015473ffffffffffffffffffffffffffffffffffffffff1690565b906b3fffffffffffffffffffffff611dcd83859060205263739094b1600c52600c1c6000526034600c205490565b16926a52b7d2dcc80cd2e4000000611e0b611e04611df5855469ffffffffffffffffffff1690565b69ffffffffffffffffffff1690565b809661163a565b116106f857611ed693600293611e3a929060205263739094b1600c52600c1c6000526034600c20908154019055565b80547fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016815501611e826110b8825473ffffffffffffffffffffffffffffffffffffffff1690565b611ea0611e99826000526006602052604060002090565b5460011c90565b68056bc75e2d631000008111611f2c5750611ec86110f7916000526006602052604060002090565b68056bc75e2d631000009055565b7f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da573ffffffffffffffffffffffffffffffffffffffff611f17848888611d14565b60405190358152921691602090a20190611d2d565b90611f41906000526006602052604060002090565b556110f7565b338103611f88576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60058101544310611a0c575469ffffffffffffffffffff161561118057565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116355760010190565b9594906121c073ffffffffffffffffffffffffffffffffffffffff927f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949687600052600560205260406000209361207869ffffffffffffffffffff895116869069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60208801517fffff0000000000000000000000000000000000000000ffffffffffffffffffff7dffffffffffffffffffffffffffffffffffffffff0000000000000000000087549260501b1691161785556121316120ed60408a015173ffffffffffffffffffffffffffffffffffffffff1690565b600187019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b606088019a61219b6121578d5173ffffffffffffffffffffffffffffffffffffffff1690565b600288019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60808901958651600382015560a08a01516004820155600560c08b0151910155612237565b6121d36121ce600454611fb5565b600455565b61223261220b6121f887995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176122655760205263739094b1600c52600c1c6000526034600c20908154039055565b63ce3a3d376000526004601cfd5b600092913d15612281575050565b9091925060205263739094b1600c526000526034600c20546b3fffffffffffffffffffffff1690565b600092913d156122b8575050565b9091925060205263739094b1600c526000526034600c205460ff1c90565b6040516020810181811067ffffffffffffffff8211176102a75760405260008152906000368137565b90612309826102cc565b6123166040519182610266565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061234482946102cc565b0190602036910137565b8051821015611d245760209160051b010190565b908151156124b3576000809280519061237a826122ff565b92612384836122ff565b955b83811061239557505050509190565b8060036123b86123a76001948761234e565b516000526005602052604060002090565b01546123e9576123c8818561234e565b516123d3828861234e565b52826123df828a61234e565b5201925b92612386565b69ffffffffffffffffffff6124146124046123a7848861234e565b5469ffffffffffffffffffff1690565b1661244957612423818561234e565b5161242e828861234e565b5261244261243c828a61234e565b60039052565b01926123e3565b60056124586123a7838761234e565b015443111561248a5761246b818561234e565b51612476828861234e565b52612442612484828a61234e565b60029052565b612494818561234e565b5161249f828861234e565b526124426124ad828a61234e565b60019052565b90506124bd6122d6565b90610c6e6122d656fea26469706673582212201444924ada6389f6c030254fb9c91f76aaa6d4c9a8f3a0403af9786524e874a564736f6c63430008130033"; type P2PIXConstructorParams = | [signer?: Signer] diff --git a/src/types/p2pix.sol/P2PIX.ts b/src/types/p2pix.sol/P2PIX.ts index b4d2f89..eb77337 100644 --- a/src/types/p2pix.sol/P2PIX.ts +++ b/src/types/p2pix.sol/P2PIX.ts @@ -39,7 +39,7 @@ export interface P2PIXInterface extends utils.Interface { "getLocksStatus(uint256[])": FunctionFragment; "getPixTarget(address,address)": FunctionFragment; "getValid(address,address)": FunctionFragment; - "lock(address,address,address,uint80,uint80,bytes32[],uint256[])": FunctionFragment; + "lock(address,address,uint80,bytes32[],uint256[])": FunctionFragment; "lockCounter()": FunctionFragment; "mapLocks(uint256)": FunctionFragment; "owner()": FunctionFragment; @@ -148,8 +148,6 @@ export interface P2PIXInterface extends utils.Interface { values: [ PromiseOrValue, PromiseOrValue, - PromiseOrValue, - PromiseOrValue, PromiseOrValue, PromiseOrValue[], PromiseOrValue[] @@ -599,8 +597,6 @@ export interface P2PIX extends BaseContract { lock( _seller: PromiseOrValue, _token: PromiseOrValue, - _buyerAddress: PromiseOrValue, - _relayerPremium: PromiseOrValue, _amount: PromiseOrValue, merkleProof: PromiseOrValue[], expiredLocks: PromiseOrValue[], @@ -614,25 +610,21 @@ export interface P2PIX extends BaseContract { overrides?: CallOverrides ): Promise< [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, BigNumber, BigNumber, string, string, - string + BigNumber, + BigNumber, + BigNumber ] & { + amount: BigNumber; + pixTarget: BigNumber; + token: string; + buyerAddress: string; sellerKey: BigNumber; counter: BigNumber; expirationBlock: BigNumber; - pixTarget: BigNumber; - relayerPremium: BigNumber; - amount: BigNumber; - buyerAddress: string; - relayerAddress: string; - token: string; } >; @@ -788,8 +780,6 @@ export interface P2PIX extends BaseContract { lock( _seller: PromiseOrValue, _token: PromiseOrValue, - _buyerAddress: PromiseOrValue, - _relayerPremium: PromiseOrValue, _amount: PromiseOrValue, merkleProof: PromiseOrValue[], expiredLocks: PromiseOrValue[], @@ -802,26 +792,14 @@ export interface P2PIX extends BaseContract { arg0: PromiseOrValue, overrides?: CallOverrides ): Promise< - [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - BigNumber, - string, - string, - string - ] & { + [BigNumber, BigNumber, string, string, BigNumber, BigNumber, BigNumber] & { + amount: BigNumber; + pixTarget: BigNumber; + token: string; + buyerAddress: string; sellerKey: BigNumber; counter: BigNumber; expirationBlock: BigNumber; - pixTarget: BigNumber; - relayerPremium: BigNumber; - amount: BigNumber; - buyerAddress: string; - relayerAddress: string; - token: string; } >; @@ -977,8 +955,6 @@ export interface P2PIX extends BaseContract { lock( _seller: PromiseOrValue, _token: PromiseOrValue, - _buyerAddress: PromiseOrValue, - _relayerPremium: PromiseOrValue, _amount: PromiseOrValue, merkleProof: PromiseOrValue[], expiredLocks: PromiseOrValue[], @@ -992,25 +968,21 @@ export interface P2PIX extends BaseContract { overrides?: CallOverrides ): Promise< [ - BigNumber, - BigNumber, - BigNumber, - BigNumber, BigNumber, BigNumber, string, string, - string + BigNumber, + BigNumber, + BigNumber ] & { + amount: BigNumber; + pixTarget: BigNumber; + token: string; + buyerAddress: string; sellerKey: BigNumber; counter: BigNumber; expirationBlock: BigNumber; - pixTarget: BigNumber; - relayerPremium: BigNumber; - amount: BigNumber; - buyerAddress: string; - relayerAddress: string; - token: string; } >; @@ -1279,8 +1251,6 @@ export interface P2PIX extends BaseContract { lock( _seller: PromiseOrValue, _token: PromiseOrValue, - _buyerAddress: PromiseOrValue, - _relayerPremium: PromiseOrValue, _amount: PromiseOrValue, merkleProof: PromiseOrValue[], expiredLocks: PromiseOrValue[], @@ -1447,8 +1417,6 @@ export interface P2PIX extends BaseContract { lock( _seller: PromiseOrValue, _token: PromiseOrValue, - _buyerAddress: PromiseOrValue, - _relayerPremium: PromiseOrValue, _amount: PromiseOrValue, merkleProof: PromiseOrValue[], expiredLocks: PromiseOrValue[], diff --git a/test/p2pix.test.ts b/test/p2pix.test.ts index 2e35dc1..87a9dfc 100644 --- a/test/p2pix.test.ts +++ b/test/p2pix.test.ts @@ -625,17 +625,17 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, price, + // acc02.address, + // 0, [], [], ); const fail2 = p2pix.lock( zero, zero, - zero, - 0, + // zero, + // 0, price, [], [], @@ -665,8 +665,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, price.mul(ethers.BigNumber.from(2)), [], [], @@ -692,8 +692,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, 1000, [ ethers.utils.keccak256( @@ -725,8 +725,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, price.mul(BigNumber.from("2")), [], [], @@ -752,8 +752,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, price, proof, [], @@ -771,7 +771,7 @@ describe("P2PIX", () => { await expect(tx) .to.emit(p2pix, "LockAdded") .withArgs( - acc02.address, + acc01.address, ethers.constants.One, key, price, @@ -779,14 +779,14 @@ describe("P2PIX", () => { expect(tx).to.be.ok; expect(storage.sellerKey).to.eq(key); expect(storage.counter).to.eq(1); - expect(storage.relayerPremium).to.eq( - ethers.constants.Zero, - ); + // expect(storage.relayerPremium).to.eq( + // ethers.constants.Zero, + // ); expect(storage.amount).to.eq(price); expect(storage.expirationBlock).to.eq(expiration); expect(storage.pixTarget).to.eq(target); - expect(storage.buyerAddress).to.eq(acc02.address); - expect(storage.relayerAddress).to.eq(acc01.address); + expect(storage.buyerAddress).to.eq(acc01.address); + // expect(storage.relayerAddress).to.eq(acc01.address); expect(storage.token).to.eq(erc20.address); }); it("should create a lock, update storage and emit events via the reputation path 1", async () => { @@ -805,8 +805,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, price, [], [], @@ -828,19 +828,19 @@ describe("P2PIX", () => { expect(castBack).to.eq(owner.address); expect(storage.sellerKey).to.eq(key); expect(storage.counter).to.eq(1); - expect(storage.relayerPremium).to.eq( - ethers.constants.Zero, - ); + // expect(storage.relayerPremium).to.eq( + // ethers.constants.Zero, + // ); expect(storage.amount).to.eq(price); expect(storage.expirationBlock).to.eq(expiration); expect(storage.pixTarget).to.eq(target); - expect(storage.buyerAddress).to.eq(acc02.address); - expect(storage.relayerAddress).to.eq(acc01.address); + expect(storage.buyerAddress).to.eq(acc01.address); + // expect(storage.relayerAddress).to.eq(acc01.address); expect(storage.token).to.eq(erc20.address); await expect(tx) .to.emit(p2pix, "LockAdded") - .withArgs(acc02.address, 1, key, storage.amount); + .withArgs(acc01.address, 1, key, storage.amount); }); it("should create a lock, update storage and emit events via the reputation path 2", async () => { const root = ethers.constants.HashZero; @@ -872,8 +872,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - price, + // acc02.address, + // price, price, [], [], @@ -892,8 +892,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, price.add(ethers.constants.One), [], [], @@ -915,21 +915,21 @@ describe("P2PIX", () => { expect(castBack).to.eq(owner.address); expect(storage.sellerKey).to.eq(key); expect(storage.counter).to.eq(2); - expect(storage.relayerPremium).to.eq( - ethers.constants.Zero, - ); + // expect(storage.relayerPremium).to.eq( + // ethers.constants.Zero, + // ); expect(storage.amount).to.eq( price.add(ethers.constants.One), ); expect(storage.expirationBlock).to.eq(expiration); expect(storage.pixTarget).to.eq(target); - expect(storage.buyerAddress).to.eq(acc02.address); - expect(storage.relayerAddress).to.eq(acc01.address); + expect(storage.buyerAddress).to.eq(acc01.address); + // expect(storage.relayerAddress).to.eq(acc01.address); expect(storage.token).to.eq(erc20.address); await expect(tx) .to.emit(p2pix, "LockAdded") - .withArgs(acc02.address, 2, key, storage.amount); + .withArgs(acc01.address, 2, key, storage.amount); }); // edge case test it("should create multiple locks", async () => { @@ -948,8 +948,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, newPrice, proof, [], @@ -966,8 +966,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, 100, [], [], @@ -984,8 +984,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc03.address, - 0, + // acc03.address, + // 0, 100, [], [], @@ -1074,10 +1074,10 @@ describe("P2PIX", () => { expect(storage2.counter).to.eq(2); expect(storage3.counter).to.eq(3); - expect(ethers.constants.Zero) - .to.eq(storage1.relayerPremium) - .and.to.eq(storage2.relayerPremium) - .and.to.eq(storage3.relayerPremium); + // expect(ethers.constants.Zero) + // .to.eq(storage1.relayerPremium) + // .and.to.eq(storage2.relayerPremium) + // .and.to.eq(storage3.relayerPremium); expect(storage1.amount).to.eq(newPrice); expect(ethers.BigNumber.from(100)) @@ -1093,7 +1093,7 @@ describe("P2PIX", () => { .and.to.eq(storage2.pixTarget) .and.to.eq(storage3.pixTarget); - expect(acc02.address) + expect(acc01.address) .to.eq(storage1.buyerAddress) .and.to.eq(storage2.buyerAddress); expect(storage3.buyerAddress).to.eq(acc03.address); @@ -1103,10 +1103,10 @@ describe("P2PIX", () => { // .and.to.eq(storage2.relayerTarget) // .and.to.eq(storage3.relayerTarget); - expect(acc01.address) - .to.eq(storage1.relayerAddress) - .and.to.eq(storage2.relayerAddress); - expect(storage3.relayerAddress).to.eq(acc03.address); + // expect(acc01.address) + // .to.eq(storage1.relayerAddress) + // .and.to.eq(storage2.relayerAddress); + // expect(storage3.relayerAddress).to.eq(acc03.address); expect(erc20.address) .to.eq(storage1.token) @@ -1115,10 +1115,10 @@ describe("P2PIX", () => { await expect(tx1) .to.emit(p2pix, "LockAdded") - .withArgs(acc02.address, 1, key, storage1.amount); + .withArgs(acc01.address, 1, key, storage1.amount); await expect(tx2) .to.emit(p2pix, "LockAdded") - .withArgs(acc02.address, 2, key, storage2.amount); + .withArgs(acc01.address, 2, key, storage2.amount); await expect(tx3) .to.emit(p2pix, "LockAdded") .withArgs(acc03.address, 3, key, storage3.amount); @@ -1277,8 +1277,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 6, + // acc02.address, + // 6, 100, [], [], @@ -1322,8 +1322,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 6, + // acc02.address, + // 6, 100, [], [], @@ -1372,8 +1372,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 6, + // acc02.address, + // 6, 100, [], [], @@ -1393,8 +1393,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 6, + // acc02.address, + // 6, 100, [], [], @@ -1438,8 +1438,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 6, + // acc02.address, + // 6, 100, [], [], @@ -1498,8 +1498,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 6, + // acc02.address, + // 6, 100, [], [], @@ -1576,7 +1576,7 @@ describe("P2PIX", () => { await expect(tx) .to.emit(p2pix, "LockReleased") .withArgs( - acc02.address, + acc03.address, ethers.constants.One, storage1.amount, ); @@ -1604,14 +1604,12 @@ describe("P2PIX", () => { expect(used).to.eq(true); expect(userRecordA).to.eq(zero); expect(userRecord1).to.eq(zero); - expect(userRecordB).to.eq(ethers.BigNumber.from(6)); - expect(userRecord2).to.eq(ethers.BigNumber.from(100)); + expect(userRecordB).to.eq(ethers.BigNumber.from(50)); + expect(userRecord2).to.eq(ethers.BigNumber.from(50)); await expect(tx).to.changeTokenBalances( erc20, [acc03.address, acc01.address, acc02.address ], - [3, 3, 94], - // acc02 is acting both as buyer and relayerTarget - // (i.e., 94 + 3 = 97) + [100, 0, 0], ); }); // edge case test @@ -1668,8 +1666,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, 100, [], [], @@ -1679,8 +1677,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 6, + // acc02.address, + // 6, 50, [], [], @@ -1690,8 +1688,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 10, + // acc02.address, + // 10, 25, [], [], @@ -1795,19 +1793,19 @@ describe("P2PIX", () => { expect(tx2).to.be.ok; await expect(tx) .to.emit(p2pix, "LockReleased") - .withArgs(acc02.address, lockID, storage1.amount); + .withArgs(acc03.address, lockID, storage1.amount); await expect(tx1) .to.emit(p2pix, "LockReleased") - .withArgs(acc02.address, lockID2, storage2.amount); + .withArgs(acc03.address, lockID2, storage2.amount); await expect(tx2) .to.emit(p2pix, "LockReleased") - .withArgs(acc02.address, lockID3, storage3.amount); + .withArgs(acc03.address, lockID3, storage3.amount); expect(used1).to.eq(true); expect(used2).to.eq(true); expect(used3).to.eq(true); expect(0).to.eq(acc01Record1).and.to.eq(acc03Record1); - expect(acc01Record2).to.eq(6); // 0 + 6 - expect(acc03Record2).to.eq(185); // 100 + 50 + 25 + 10 + expect(acc01Record2).to.eq(75); // 50 + 25 + 0 + expect(acc03Record2).to.eq(100); // 50 + 25 + 25 const addresses = [ acc01.address, @@ -1817,9 +1815,9 @@ describe("P2PIX", () => { ]; const balances = [ - [0, 100, 0, "-100"], - [3, 44, 3, "-50"], - [0, 15, 10, "-25"], + [0, 0, 100, "-100"], + [0, 0, 50, "-50"], + [0, 0, 25, "-25"], ]; for (let i = 0; i < 3; i++) { @@ -1867,8 +1865,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, 1, [], [], @@ -1907,8 +1905,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, 1, [], [], @@ -1944,8 +1942,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, 1, [], [], @@ -2009,8 +2007,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, price, proof, [], @@ -2050,8 +2048,8 @@ describe("P2PIX", () => { const tx1 = await p2pix.lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, 100, [], [lockID], @@ -2064,7 +2062,7 @@ describe("P2PIX", () => { expect(tx1).to.be.ok; await expect(tx1) .to.emit(p2pix, "LockReturned") - .withArgs(acc02.address, lockID); + .withArgs(acc01.address, lockID); expect(remaining).to.eq( price.sub(ethers.BigNumber.from(100)), ); @@ -2085,8 +2083,8 @@ describe("P2PIX", () => { .lock( owner.address, erc20.address, - acc02.address, - 0, + // acc02.address, + // 0, price, proof, [], @@ -2105,7 +2103,7 @@ describe("P2PIX", () => { expect(tx).to.be.ok; await expect(tx) .to.emit(p2pix, "LockReturned") - .withArgs(acc02.address, lockID); + .withArgs(acc01.address, lockID); expect(remaining).to.eq(0); }); }); diff --git a/test/utils/fixtures.ts b/test/utils/fixtures.ts index 6534e2a..704e842 100644 --- a/test/utils/fixtures.ts +++ b/test/utils/fixtures.ts @@ -22,13 +22,11 @@ export interface Deploys { export interface Lock { sellerKey: BigNumber; counter: BigNumber; - relayerPremium: BigNumber; - amount: BigNumber; expirationBlock: BigNumber; pixTarget: BigNumber; - buyerAddress: string; - relayerAddress: string; token: string; + buyerAddress: string; + amount: BigNumber; } export interface Call {