From 4281526d77f3e11be5c12452230488bcc93730fa Mon Sep 17 00:00:00 2001 From: PedroCailleret Date: Sun, 21 May 2023 02:40:42 -0300 Subject: [PATCH] :wrench: Inheritance reordering --- .../core/BaseUtils.sol/BaseUtils.dbg.json | 2 +- artifacts/contracts/p2pix.sol/P2PIX.dbg.json | 2 +- artifacts/contracts/p2pix.sol/P2PIX.json | 4 +- contracts/core/BaseUtils.sol | 76 ++++++++++++++++++- contracts/p2pix.sol | 51 ------------- .../factories/p2pix.sol/P2PIX__factory.ts | 2 +- 6 files changed, 78 insertions(+), 59 deletions(-) diff --git a/artifacts/contracts/core/BaseUtils.sol/BaseUtils.dbg.json b/artifacts/contracts/core/BaseUtils.sol/BaseUtils.dbg.json index 59faafd..8bb0302 100644 --- a/artifacts/contracts/core/BaseUtils.sol/BaseUtils.dbg.json +++ b/artifacts/contracts/core/BaseUtils.sol/BaseUtils.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/cd64a64b3749ac90866585a6471cc921.json" + "buildInfo": "../../../build-info/f220dbc6fa6f1dbf5c2cb562d65f0725.json" } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.dbg.json b/artifacts/contracts/p2pix.sol/P2PIX.dbg.json index 7881f4e..cbd2800 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/cd64a64b3749ac90866585a6471cc921.json" + "buildInfo": "../../build-info/f220dbc6fa6f1dbf5c2cb562d65f0725.json" } diff --git a/artifacts/contracts/p2pix.sol/P2PIX.json b/artifacts/contracts/p2pix.sol/P2PIX.json index 95ef886..292ddc4 100644 --- a/artifacts/contracts/p2pix.sol/P2PIX.json +++ b/artifacts/contracts/p2pix.sol/P2PIX.json @@ -1116,8 +1116,8 @@ "type": "receive" } ], - "bytecode": "0x608060405262002c0a80380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516127c89081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816003556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600455565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102365780630d2a2d441461023157806313af40351461022c578063367821f014610227578063461f3120146101d757806349ef8448146102225780634b2ae9801461021d578063572b6c0514610218578063574983c8146102135780635fd8c7101461020e57806369cc6af4146102095780636d82d9e01461020457806377cd38a4146101ff5780637f94f65d146101fa57806380e1d302146101f557806384ab1d28146101f05780638da5cb5b146101eb5780638db564c2146101e6578063918dff57146101e15780639872dbfe146101dc57806398a26871146101d75780639b6d694d146101d2578063ad8f2eed146101cd578063b0983d39146101c8578063c52164c6146101c3578063c593dfd8146101be578063d1c07028146101b9578063d1ced2b0146101b4578063d4fac45d146101af578063d6e8b973146101aa578063dc43221c146101a5578063e449c52a146101a0578063f7d0e04b1461019b5763fb8c5ef00361000e57611532565b6114c2565b611487565b6113ec565b61133a565b611321565b611272565b61112c565b610dfb565b610dc7565b610d8d565b610d49565b610cd9565b6105eb565b610c46565b610bbb565b610b7a565b610b46565b610b10565b610af7565b610aa6565b610a6e565b610917565b6108ca565b610847565b6107e3565b610793565b610769565b6106ce565b610559565b6104c7565b61039a565b346102625760206003193601126102625760043560005260076020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102d757604052565b610267565b6040519060e0820182811067ffffffffffffffff8211176102d757604052565b67ffffffffffffffff81116102d75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361026257565b81601f8201121561026257803591610349836102fc565b926103576040519485610296565b808452602092838086019260051b820101928311610262578301905b828210610381575050505090565b838091833561038f81610314565b815201910190610373565b34610262576020806003193601126102625760043567ffffffffffffffff8111610262576103cc903690600401610332565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361049d57805181830192849160051b830181013d1515855b8115610469575b50505060405192818401908285525180915260408401949160005b828110610453577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b8351851687529581019592810192600101610424565b90838260018298969499979951600c1b55019083821015610491579150959395949294610402565b50959395949294610409565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576004356104e481610314565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361049d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b3461026257602060031936011261026257600435600052600660205260e060406000208054906005600182015491600281015460038201549060048301549273ffffffffffffffffffffffffffffffffffffffff9485910154169460405196875260208701526040860152606085015269ffffffffffffffffffff8116608085015260501c1660a083015260c0820152f35b34610262576020600319360112610262576020600435546040519015158152f35b90815180825260208080930193019160005b82811061062c575050505090565b83518552938101939281019260010161061e565b906106539060408352604083019061060c565b81810360209283015282518082529082019282019160009190825b82811061067d57505050505090565b909192939485516004808210156106a25750815282019482019392919060010161066e565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610262576020806003193601126102625760043567ffffffffffffffff811161026257366023820112156102625780600401359061070c826102fc565b9161071a6040519384610296565b80835260248484019160051b8301019136831161026257602401905b82821061075a576107468461262e565b9061075660405192839283610640565b0390f35b81358152908401908401610736565b3461026257602060031936011261026257602060043561078881610314565b60405190600c1b8152f35b346102625760206003193601126102625773ffffffffffffffffffffffffffffffffffffffff6004356107c581610314565b166000526001602052602060ff604060002054166040519015158152f35b346102625760206003193601126102625760043573ffffffffffffffffffffffffffffffffffffffff60005416330361049d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600355604051908152a1005b34610262576000806003193601126108c75773ffffffffffffffffffffffffffffffffffffffff815416330361049d57478180808084335af1156108ba576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b346102625760206003193601126102625760206109006004356108ec81610314565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3590811515820361026257565b346102625760406003193601126102625760043561093481610314565b602435801515810361026257602082905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44577fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4991610a3f918460205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000526b3fffffffffffffffffffffff82605f1b91161760016034600c20015560405191829173ffffffffffffffffffffffffffffffffffffffff3396168390929160209073ffffffffffffffffffffffffffffffffffffffff60408401951683521515910152565b0390a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576020610a9e6004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461026257604060031936011261026257610019600435610ac681610314565b60243590612221565b600319604091011261026257600435610ae781610314565b90602435610af481610314565b90565b34610262576020610900610b0a36610acf565b9061253c565b3461026257602060031936011261026257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610262576000600319360112610262576020600554604051908152f35b60005b838110610bab5750506000910152565b8181015183820152602001610b9b565b3461026257610bd2610bcc36610acf565b90612579565b604051906020820190815260208252604082019180831067ffffffffffffffff8411176102d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409385855260208652610c3d845180928160608801526080870190610b98565b01168101030190f35b34610262576000600319360112610262576020600354604051908152f35b81601f820112156102625780359067ffffffffffffffff82116102d75760405192610cb760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610296565b8284526020838301011161026257816000926020809301838601378301015290565b346102625760a060031936011261026257600435610cf681610314565b602435906bffffffffffffffffffffffff821682036102625760443567ffffffffffffffff811161026257610d2f903690600401610c64565b6064359081151582036102625761001993608435936116cf565b34610262576020610a9e610bcc36610acf565b9181601f840112156102625782359167ffffffffffffffff8311610262576020808501948460051b01011161026257565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610dc1610019913690600401610d5c565b90612023565b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346102625760a06003193601126102625760043560843560ff8116810361026257610e246118c5565b610e38826000526006602052604060002090565b6004810180549169ffffffffffffffffffff83169283156110f15760028201805443116110c75784600584610f5d7f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8996000610fac96610f56610fdf9b610f2e89610ef2610f1e610fc69f6003015460405192839160208301956024359187917fffffffffffffffffffff0000000000000000000000000000000000000000000090604a9492845260b01b166020830152602a8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610296565b5190209560643560443588611ea8565b7fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008154169055565b5560019055565b610f65611e33565b905015610ffa575b019273ffffffffffffffffffffffffffffffffffffffff610fa2855473ffffffffffffffffffffffffffffffffffffffff1690565b9160501c16611f96565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600455565b81810161101e610fc6825473ffffffffffffffffffffffffffffffffffffffff1690565b33146110a45761109d61109561108561107f697fffffffffffffffffff8a60011c169461105833600c1b6000526007602052604060002090565b6110638782546116c2565b90555473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526007602052604060002090565b9182546116c2565b9055610f6d565b506110bc33600c1b6000526007602052604060002090565b61109d8482546116c2565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610af492818152019061060c565b346102625760406003193601126102625760043567ffffffffffffffff81116102625761115d903690600401610332565b6024359061116a82610314565b600091815191611179836125cb565b935b8381106111905760405180610756878261111b565b806111bd8473ffffffffffffffffffffffffffffffffffffffff6111b66001958761261a565b5116612502565b6111c7828861261a565b520161117b565b9060406003198301126102625767ffffffffffffffff9160043583811161026257816111fc91600401610332565b92602435908111610262578160238201121561026257806004013591611221836102fc565b9261122f6040519485610296565b80845260209260248486019260051b82010192831161026257602401905b82821061125b575050505090565b8380916112678461090a565b81520191019061124d565b3461026257611280366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d57825190811561131f57805182036113125790602084818080970194019260051b0101915b8281036112d0578380f35b8480916001825280518652835180604088205581517fbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df928880a3019101906112c5565b63ff633a3883526004601cfd5bfe5b34610262576020610a9e61133436610acf565b90612502565b3461026257611348366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d5782519081156113df57805182036113125790602084818080970194019260051b0101915b828103611398578380f35b84809181600c63cbc9d1c48152825188528551918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8880a30191019061138d565b63df95788383526004601cfd5b346102625760a06003193601126102625760043561140981610314565b6024359061141682610314565b6044359169ffffffffffffffffffff831683036102625767ffffffffffffffff916064358381116102625761144f903690600401610d5c565b90608435948511610262576107569561146f611477963690600401610d5c565b959094611a2f565b6040519081529081906020820190565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610a9e6114bd6020923690600401610c64565b61164a565b34610262576020600319360112610262576004356114df81610314565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361049d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1005b346102625760606003193601126102625760043561154f81610314565b60243560443567ffffffffffffffff8111610262577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916115a861159a611632933690600401610d5c565b906115a36118c5565b612023565b6115b2843361253c565b61163c575b6115f633600c1b85836b3fffffffffffffffffffffff6115f083859060205263739094b1600c52600c1c60005260016034600c20015490565b166124c3565b611601813386611f96565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600455005b61164584611959565b6115b7565b604051611674602082816116678183019687815193849201610b98565b8101038084520182610296565b5160201061131f575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116bd57565b611680565b919082018092116116bd57565b939273ffffffffffffffffffffffffffffffffffffffff85169333600c1b9484511561189b576117146117108263cbc9d1c4600c526000526020600c205490565b1590565b611871576b3fffffffffffffffffffffff61174882889060205263739094b1600c52600c1c60005260016034600c20015490565b16916117636bffffffffffffffffffffffff861680946116c2565b936a52b7d2dcc80cd2e40000008511611847577f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf97836117eb966117bc6118329a6117e2966117b06118c5565b80611837575b5061164a565b93605f1b17919060205263739094b1600c52600c1c6000526034600c2090600182015555565b30903390611900565b6117f56001600455565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2565b6118419033612221565b386117b6565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b6002600454146118d6576002600455565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d1560016000511417161561194b576000606052604052565b637939f4246000526004601cfd5b602081905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44576b3fffffffffffffffffffffff908260205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000521660016034600c20015573ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9295611a559073ffffffffffffffffffffffffffffffffffffffff9395966115a36118c5565b1691611a64611710848461253c565b611ce557611a728383612502565b9469ffffffffffffffffffff80831691828810611cbb5784600c1b96611a996005546116af565b946002611ab0876000526006602052604060002090565b0154431115611c9157611ac1611e33565b611ada8a611ad4600398949854436116c2565b9a612579565b611ae26102dc565b998c8b528960208c015260408b015260608a0152611b1060808a0193849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8a1660a08a015273ffffffffffffffffffffffffffffffffffffffff861660c08a01528315611b8e5750505091611b7c91611b819993611b768a6374dfee70600c52600c1c60005260206000205490565b91611d2c565b6122bf565b90611b8c6001600455565b565b9250819450809350611bb468056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611bcb57505050611bc6956122bf565b611b81565b15611bdb575050611bc6956122bf565b611c0c611c07611bf833600c1b6000526007602052604060002090565b54670de0b6b3a7640000900490565b611dba565b81611c2a611c24855169ffffffffffffffffffff1690565b92611d0f565b911611918215611c6e575b5050611c4457611bc6956122bf565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611c35565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156116bd57565b73ffffffffffffffffffffffffffffffffffffffff8293941692611d7e575b505003611d5457565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611daf579290611d88565b509150503880611d4b565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102d7576020926000926040525190600254617530fa906000519115611e2557565b63e10bf1cc6000526004601cfd5b611e3b611e61565b90600073ffffffffffffffffffffffffffffffffffffffff83163314610af45750600190565b33600052600160205260ff60406000205416600014611ea4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b3390565b918254611f6c5760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611f5f576060526040829052600c1b5415611f375750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611fd257603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561201e5760051b0190565b611fdf565b6000905b82821061204457501061203657565b63dfb035c96000526004601cfd5b9061206461205382858561200e565b356000526006602052604060002090565b61206d81612270565b80549060048082019081549073ffffffffffffffffffffffffffffffffffffffff94858360501c16916a52b7d2dcc80cd2e40000006120ea69ffffffffffffffffffff6b3fffffffffffffffffffffff6120e087879060205263739094b1600c52600c1c60005260016034600c20015490565b16961680966116c2565b116121f95750936121477f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da594610f2e6121bd9560059560019b9a999060205263739094b1600c52600c1c60005260016034600c2001908154019055565b0161216961107f825473ffffffffffffffffffffffffffffffffffffffff1690565b612187612180826000526007602052604060002090565b5460011c90565b68056bc75e2d6310000081116121de57506121af610fac916000526007602052604060002090565b68056bc75e2d631000009055565b916121c984888861200e565b60405190358152921691602090a20190612027565b906121f3906000526007602052604060002090565b55610fac565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b338103612262576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611c91576004015469ffffffffffffffffffff16156110f157565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116bd5760010190565b9261244c61240597967f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949673ffffffffffffffffffffffffffffffffffffffff94612358978960005260066020526124476040600020875181556020880151600182015560408801516002820155606088015160038201556123e36004820161238f60808b019d8e5169ffffffffffffffffffff1690565b829069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60a08a015181547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff0000000000000000000016179055565b600560c089019e8f5173ffffffffffffffffffffffffffffffffffffffff1690565b91019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6124c3565b61245f61245a600554612292565b600555565b6124be61249761248487995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176124f45760205263739094b1600c52600c1c60005260016034600c2001908154039055565b63ce3a3d376000526004601cfd5b600092913d15612510575050565b9091925060205263739094b1600c5260005260016034600c2001546b3fffffffffffffffffffffff1690565b600092913d1561254a575050565b9091925060205263739094b1600c5260005260016034600c200154605f1c6b3fffffffffffffffffffffff1690565b600092913d15612587575050565b9091925060205263739094b1600c526000526034600c205490565b6040516020810181811067ffffffffffffffff8211176102d75760405260008152906000368137565b906125d5826102fc565b6125e26040519182610296565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061261082946102fc565b0190602036910137565b805182101561201e5760209160051b010190565b9081511561277f5760008092805190612646826125cb565b92612650836125cb565b955b83811061266157505050509190565b806126826126716001938661261a565b516000526006602052604060002090565b546126b257612691818561261a565b5161269c828861261a565b52826126a8828a61261a565b5201925b92612652565b69ffffffffffffffffffff6126e060046126cf612671858961261a565b015469ffffffffffffffffffff1690565b16612715576126ef818561261a565b516126fa828861261a565b5261270e612708828a61261a565b60039052565b01926126ac565b6002612724612671838761261a565b015443111561275657612737818561261a565b51612742828861261a565b5261270e612750828a61261a565b60029052565b612760818561261a565b5161276b828861261a565b5261270e612779828a61261a565b60019052565b90506127896125a2565b90610af46125a256fea2646970667358221220f49567e90ed620a29f8840f9786e491e73bd50793a4a3d9e96837fbbd97a353b64736f6c63430008130033", - "deployedBytecode": "0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102365780630d2a2d441461023157806313af40351461022c578063367821f014610227578063461f3120146101d757806349ef8448146102225780634b2ae9801461021d578063572b6c0514610218578063574983c8146102135780635fd8c7101461020e57806369cc6af4146102095780636d82d9e01461020457806377cd38a4146101ff5780637f94f65d146101fa57806380e1d302146101f557806384ab1d28146101f05780638da5cb5b146101eb5780638db564c2146101e6578063918dff57146101e15780639872dbfe146101dc57806398a26871146101d75780639b6d694d146101d2578063ad8f2eed146101cd578063b0983d39146101c8578063c52164c6146101c3578063c593dfd8146101be578063d1c07028146101b9578063d1ced2b0146101b4578063d4fac45d146101af578063d6e8b973146101aa578063dc43221c146101a5578063e449c52a146101a0578063f7d0e04b1461019b5763fb8c5ef00361000e57611532565b6114c2565b611487565b6113ec565b61133a565b611321565b611272565b61112c565b610dfb565b610dc7565b610d8d565b610d49565b610cd9565b6105eb565b610c46565b610bbb565b610b7a565b610b46565b610b10565b610af7565b610aa6565b610a6e565b610917565b6108ca565b610847565b6107e3565b610793565b610769565b6106ce565b610559565b6104c7565b61039a565b346102625760206003193601126102625760043560005260076020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102d757604052565b610267565b6040519060e0820182811067ffffffffffffffff8211176102d757604052565b67ffffffffffffffff81116102d75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361026257565b81601f8201121561026257803591610349836102fc565b926103576040519485610296565b808452602092838086019260051b820101928311610262578301905b828210610381575050505090565b838091833561038f81610314565b815201910190610373565b34610262576020806003193601126102625760043567ffffffffffffffff8111610262576103cc903690600401610332565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361049d57805181830192849160051b830181013d1515855b8115610469575b50505060405192818401908285525180915260408401949160005b828110610453577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b8351851687529581019592810192600101610424565b90838260018298969499979951600c1b55019083821015610491579150959395949294610402565b50959395949294610409565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576004356104e481610314565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361049d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b3461026257602060031936011261026257600435600052600660205260e060406000208054906005600182015491600281015460038201549060048301549273ffffffffffffffffffffffffffffffffffffffff9485910154169460405196875260208701526040860152606085015269ffffffffffffffffffff8116608085015260501c1660a083015260c0820152f35b34610262576020600319360112610262576020600435546040519015158152f35b90815180825260208080930193019160005b82811061062c575050505090565b83518552938101939281019260010161061e565b906106539060408352604083019061060c565b81810360209283015282518082529082019282019160009190825b82811061067d57505050505090565b909192939485516004808210156106a25750815282019482019392919060010161066e565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610262576020806003193601126102625760043567ffffffffffffffff811161026257366023820112156102625780600401359061070c826102fc565b9161071a6040519384610296565b80835260248484019160051b8301019136831161026257602401905b82821061075a576107468461262e565b9061075660405192839283610640565b0390f35b81358152908401908401610736565b3461026257602060031936011261026257602060043561078881610314565b60405190600c1b8152f35b346102625760206003193601126102625773ffffffffffffffffffffffffffffffffffffffff6004356107c581610314565b166000526001602052602060ff604060002054166040519015158152f35b346102625760206003193601126102625760043573ffffffffffffffffffffffffffffffffffffffff60005416330361049d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600355604051908152a1005b34610262576000806003193601126108c75773ffffffffffffffffffffffffffffffffffffffff815416330361049d57478180808084335af1156108ba576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b346102625760206003193601126102625760206109006004356108ec81610314565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3590811515820361026257565b346102625760406003193601126102625760043561093481610314565b602435801515810361026257602082905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44577fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4991610a3f918460205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000526b3fffffffffffffffffffffff82605f1b91161760016034600c20015560405191829173ffffffffffffffffffffffffffffffffffffffff3396168390929160209073ffffffffffffffffffffffffffffffffffffffff60408401951683521515910152565b0390a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576020610a9e6004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461026257604060031936011261026257610019600435610ac681610314565b60243590612221565b600319604091011261026257600435610ae781610314565b90602435610af481610314565b90565b34610262576020610900610b0a36610acf565b9061253c565b3461026257602060031936011261026257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610262576000600319360112610262576020600554604051908152f35b60005b838110610bab5750506000910152565b8181015183820152602001610b9b565b3461026257610bd2610bcc36610acf565b90612579565b604051906020820190815260208252604082019180831067ffffffffffffffff8411176102d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409385855260208652610c3d845180928160608801526080870190610b98565b01168101030190f35b34610262576000600319360112610262576020600354604051908152f35b81601f820112156102625780359067ffffffffffffffff82116102d75760405192610cb760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610296565b8284526020838301011161026257816000926020809301838601378301015290565b346102625760a060031936011261026257600435610cf681610314565b602435906bffffffffffffffffffffffff821682036102625760443567ffffffffffffffff811161026257610d2f903690600401610c64565b6064359081151582036102625761001993608435936116cf565b34610262576020610a9e610bcc36610acf565b9181601f840112156102625782359167ffffffffffffffff8311610262576020808501948460051b01011161026257565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610dc1610019913690600401610d5c565b90612023565b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346102625760a06003193601126102625760043560843560ff8116810361026257610e246118c5565b610e38826000526006602052604060002090565b6004810180549169ffffffffffffffffffff83169283156110f15760028201805443116110c75784600584610f5d7f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8996000610fac96610f56610fdf9b610f2e89610ef2610f1e610fc69f6003015460405192839160208301956024359187917fffffffffffffffffffff0000000000000000000000000000000000000000000090604a9492845260b01b166020830152602a8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610296565b5190209560643560443588611ea8565b7fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008154169055565b5560019055565b610f65611e33565b905015610ffa575b019273ffffffffffffffffffffffffffffffffffffffff610fa2855473ffffffffffffffffffffffffffffffffffffffff1690565b9160501c16611f96565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600455565b81810161101e610fc6825473ffffffffffffffffffffffffffffffffffffffff1690565b33146110a45761109d61109561108561107f697fffffffffffffffffff8a60011c169461105833600c1b6000526007602052604060002090565b6110638782546116c2565b90555473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526007602052604060002090565b9182546116c2565b9055610f6d565b506110bc33600c1b6000526007602052604060002090565b61109d8482546116c2565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610af492818152019061060c565b346102625760406003193601126102625760043567ffffffffffffffff81116102625761115d903690600401610332565b6024359061116a82610314565b600091815191611179836125cb565b935b8381106111905760405180610756878261111b565b806111bd8473ffffffffffffffffffffffffffffffffffffffff6111b66001958761261a565b5116612502565b6111c7828861261a565b520161117b565b9060406003198301126102625767ffffffffffffffff9160043583811161026257816111fc91600401610332565b92602435908111610262578160238201121561026257806004013591611221836102fc565b9261122f6040519485610296565b80845260209260248486019260051b82010192831161026257602401905b82821061125b575050505090565b8380916112678461090a565b81520191019061124d565b3461026257611280366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d57825190811561131f57805182036113125790602084818080970194019260051b0101915b8281036112d0578380f35b8480916001825280518652835180604088205581517fbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df928880a3019101906112c5565b63ff633a3883526004601cfd5bfe5b34610262576020610a9e61133436610acf565b90612502565b3461026257611348366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d5782519081156113df57805182036113125790602084818080970194019260051b0101915b828103611398578380f35b84809181600c63cbc9d1c48152825188528551918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8880a30191019061138d565b63df95788383526004601cfd5b346102625760a06003193601126102625760043561140981610314565b6024359061141682610314565b6044359169ffffffffffffffffffff831683036102625767ffffffffffffffff916064358381116102625761144f903690600401610d5c565b90608435948511610262576107569561146f611477963690600401610d5c565b959094611a2f565b6040519081529081906020820190565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610a9e6114bd6020923690600401610c64565b61164a565b34610262576020600319360112610262576004356114df81610314565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361049d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1005b346102625760606003193601126102625760043561154f81610314565b60243560443567ffffffffffffffff8111610262577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916115a861159a611632933690600401610d5c565b906115a36118c5565b612023565b6115b2843361253c565b61163c575b6115f633600c1b85836b3fffffffffffffffffffffff6115f083859060205263739094b1600c52600c1c60005260016034600c20015490565b166124c3565b611601813386611f96565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600455005b61164584611959565b6115b7565b604051611674602082816116678183019687815193849201610b98565b8101038084520182610296565b5160201061131f575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116bd57565b611680565b919082018092116116bd57565b939273ffffffffffffffffffffffffffffffffffffffff85169333600c1b9484511561189b576117146117108263cbc9d1c4600c526000526020600c205490565b1590565b611871576b3fffffffffffffffffffffff61174882889060205263739094b1600c52600c1c60005260016034600c20015490565b16916117636bffffffffffffffffffffffff861680946116c2565b936a52b7d2dcc80cd2e40000008511611847577f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf97836117eb966117bc6118329a6117e2966117b06118c5565b80611837575b5061164a565b93605f1b17919060205263739094b1600c52600c1c6000526034600c2090600182015555565b30903390611900565b6117f56001600455565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2565b6118419033612221565b386117b6565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b6002600454146118d6576002600455565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d1560016000511417161561194b576000606052604052565b637939f4246000526004601cfd5b602081905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44576b3fffffffffffffffffffffff908260205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000521660016034600c20015573ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9295611a559073ffffffffffffffffffffffffffffffffffffffff9395966115a36118c5565b1691611a64611710848461253c565b611ce557611a728383612502565b9469ffffffffffffffffffff80831691828810611cbb5784600c1b96611a996005546116af565b946002611ab0876000526006602052604060002090565b0154431115611c9157611ac1611e33565b611ada8a611ad4600398949854436116c2565b9a612579565b611ae26102dc565b998c8b528960208c015260408b015260608a0152611b1060808a0193849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8a1660a08a015273ffffffffffffffffffffffffffffffffffffffff861660c08a01528315611b8e5750505091611b7c91611b819993611b768a6374dfee70600c52600c1c60005260206000205490565b91611d2c565b6122bf565b90611b8c6001600455565b565b9250819450809350611bb468056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611bcb57505050611bc6956122bf565b611b81565b15611bdb575050611bc6956122bf565b611c0c611c07611bf833600c1b6000526007602052604060002090565b54670de0b6b3a7640000900490565b611dba565b81611c2a611c24855169ffffffffffffffffffff1690565b92611d0f565b911611918215611c6e575b5050611c4457611bc6956122bf565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611c35565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156116bd57565b73ffffffffffffffffffffffffffffffffffffffff8293941692611d7e575b505003611d5457565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611daf579290611d88565b509150503880611d4b565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102d7576020926000926040525190600254617530fa906000519115611e2557565b63e10bf1cc6000526004601cfd5b611e3b611e61565b90600073ffffffffffffffffffffffffffffffffffffffff83163314610af45750600190565b33600052600160205260ff60406000205416600014611ea4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b3390565b918254611f6c5760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611f5f576060526040829052600c1b5415611f375750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611fd257603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561201e5760051b0190565b611fdf565b6000905b82821061204457501061203657565b63dfb035c96000526004601cfd5b9061206461205382858561200e565b356000526006602052604060002090565b61206d81612270565b80549060048082019081549073ffffffffffffffffffffffffffffffffffffffff94858360501c16916a52b7d2dcc80cd2e40000006120ea69ffffffffffffffffffff6b3fffffffffffffffffffffff6120e087879060205263739094b1600c52600c1c60005260016034600c20015490565b16961680966116c2565b116121f95750936121477f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da594610f2e6121bd9560059560019b9a999060205263739094b1600c52600c1c60005260016034600c2001908154019055565b0161216961107f825473ffffffffffffffffffffffffffffffffffffffff1690565b612187612180826000526007602052604060002090565b5460011c90565b68056bc75e2d6310000081116121de57506121af610fac916000526007602052604060002090565b68056bc75e2d631000009055565b916121c984888861200e565b60405190358152921691602090a20190612027565b906121f3906000526007602052604060002090565b55610fac565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b338103612262576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611c91576004015469ffffffffffffffffffff16156110f157565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116bd5760010190565b9261244c61240597967f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949673ffffffffffffffffffffffffffffffffffffffff94612358978960005260066020526124476040600020875181556020880151600182015560408801516002820155606088015160038201556123e36004820161238f60808b019d8e5169ffffffffffffffffffff1690565b829069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60a08a015181547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff0000000000000000000016179055565b600560c089019e8f5173ffffffffffffffffffffffffffffffffffffffff1690565b91019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6124c3565b61245f61245a600554612292565b600555565b6124be61249761248487995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176124f45760205263739094b1600c52600c1c60005260016034600c2001908154039055565b63ce3a3d376000526004601cfd5b600092913d15612510575050565b9091925060205263739094b1600c5260005260016034600c2001546b3fffffffffffffffffffffff1690565b600092913d1561254a575050565b9091925060205263739094b1600c5260005260016034600c200154605f1c6b3fffffffffffffffffffffff1690565b600092913d15612587575050565b9091925060205263739094b1600c526000526034600c205490565b6040516020810181811067ffffffffffffffff8211176102d75760405260008152906000368137565b906125d5826102fc565b6125e26040519182610296565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061261082946102fc565b0190602036910137565b805182101561201e5760209160051b010190565b9081511561277f5760008092805190612646826125cb565b92612650836125cb565b955b83811061266157505050509190565b806126826126716001938661261a565b516000526006602052604060002090565b546126b257612691818561261a565b5161269c828861261a565b52826126a8828a61261a565b5201925b92612652565b69ffffffffffffffffffff6126e060046126cf612671858961261a565b015469ffffffffffffffffffff1690565b16612715576126ef818561261a565b516126fa828861261a565b5261270e612708828a61261a565b60039052565b01926126ac565b6002612724612671838761261a565b015443111561275657612737818561261a565b51612742828861261a565b5261270e612750828a61261a565b60029052565b612760818561261a565b5161276b828861261a565b5261270e612779828a61261a565b60019052565b90506127896125a2565b90610af46125a256fea2646970667358221220f49567e90ed620a29f8840f9786e491e73bd50793a4a3d9e96837fbbd97a353b64736f6c63430008130033", + "bytecode": "0x608060405262002c0a80380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516127c89081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816003556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600455565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102365780630d2a2d441461023157806313af40351461022c578063367821f014610227578063461f3120146101d757806349ef8448146102225780634b2ae9801461021d578063572b6c0514610218578063574983c8146102135780635fd8c7101461020e57806369cc6af4146102095780636d82d9e01461020457806377cd38a4146101ff5780637f94f65d146101fa57806380e1d302146101f557806384ab1d28146101f05780638da5cb5b146101eb5780638db564c2146101e6578063918dff57146101e15780639872dbfe146101dc57806398a26871146101d75780639b6d694d146101d2578063ad8f2eed146101cd578063b0983d39146101c8578063c52164c6146101c3578063c593dfd8146101be578063d1c07028146101b9578063d1ced2b0146101b4578063d4fac45d146101af578063d6e8b973146101aa578063dc43221c146101a5578063e449c52a146101a0578063f7d0e04b1461019b5763fb8c5ef00361000e57611532565b6114c2565b611487565b6113ec565b61133a565b611321565b611272565b61112c565b610dfb565b610dc7565b610d8d565b610d49565b610cd9565b6105eb565b610c46565b610bbb565b610b7a565b610b46565b610b10565b610af7565b610aa6565b610a6e565b610917565b6108ca565b610847565b6107e3565b610793565b610769565b6106ce565b610559565b6104c7565b61039a565b346102625760206003193601126102625760043560005260076020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102d757604052565b610267565b6040519060e0820182811067ffffffffffffffff8211176102d757604052565b67ffffffffffffffff81116102d75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361026257565b81601f8201121561026257803591610349836102fc565b926103576040519485610296565b808452602092838086019260051b820101928311610262578301905b828210610381575050505090565b838091833561038f81610314565b815201910190610373565b34610262576020806003193601126102625760043567ffffffffffffffff8111610262576103cc903690600401610332565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361049d57805181830192849160051b830181013d1515855b8115610469575b50505060405192818401908285525180915260408401949160005b828110610453577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b8351851687529581019592810192600101610424565b90838260018298969499979951600c1b55019083821015610491579150959395949294610402565b50959395949294610409565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576004356104e481610314565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361049d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b3461026257602060031936011261026257600435600052600660205260e060406000208054906005600182015491600281015460038201549060048301549273ffffffffffffffffffffffffffffffffffffffff9485910154169460405196875260208701526040860152606085015269ffffffffffffffffffff8116608085015260501c1660a083015260c0820152f35b34610262576020600319360112610262576020600435546040519015158152f35b90815180825260208080930193019160005b82811061062c575050505090565b83518552938101939281019260010161061e565b906106539060408352604083019061060c565b81810360209283015282518082529082019282019160009190825b82811061067d57505050505090565b909192939485516004808210156106a25750815282019482019392919060010161066e565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610262576020806003193601126102625760043567ffffffffffffffff811161026257366023820112156102625780600401359061070c826102fc565b9161071a6040519384610296565b80835260248484019160051b8301019136831161026257602401905b82821061075a576107468461262e565b9061075660405192839283610640565b0390f35b81358152908401908401610736565b3461026257602060031936011261026257602060043561078881610314565b60405190600c1b8152f35b346102625760206003193601126102625773ffffffffffffffffffffffffffffffffffffffff6004356107c581610314565b166000526001602052602060ff604060002054166040519015158152f35b346102625760206003193601126102625760043573ffffffffffffffffffffffffffffffffffffffff60005416330361049d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600355604051908152a1005b34610262576000806003193601126108c75773ffffffffffffffffffffffffffffffffffffffff815416330361049d57478180808084335af1156108ba576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b346102625760206003193601126102625760206109006004356108ec81610314565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3590811515820361026257565b346102625760406003193601126102625760043561093481610314565b602435801515810361026257602082905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44577fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4991610a3f918460205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000526b3fffffffffffffffffffffff82605f1b91161760016034600c20015560405191829173ffffffffffffffffffffffffffffffffffffffff3396168390929160209073ffffffffffffffffffffffffffffffffffffffff60408401951683521515910152565b0390a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576020610a9e6004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461026257604060031936011261026257610019600435610ac681610314565b60243590612221565b600319604091011261026257600435610ae781610314565b90602435610af481610314565b90565b34610262576020610900610b0a36610acf565b9061253c565b3461026257602060031936011261026257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610262576000600319360112610262576020600554604051908152f35b60005b838110610bab5750506000910152565b8181015183820152602001610b9b565b3461026257610bd2610bcc36610acf565b90612579565b604051906020820190815260208252604082019180831067ffffffffffffffff8411176102d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409385855260208652610c3d845180928160608801526080870190610b98565b01168101030190f35b34610262576000600319360112610262576020600354604051908152f35b81601f820112156102625780359067ffffffffffffffff82116102d75760405192610cb760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610296565b8284526020838301011161026257816000926020809301838601378301015290565b346102625760a060031936011261026257600435610cf681610314565b602435906bffffffffffffffffffffffff821682036102625760443567ffffffffffffffff811161026257610d2f903690600401610c64565b6064359081151582036102625761001993608435936116cf565b34610262576020610a9e610bcc36610acf565b9181601f840112156102625782359167ffffffffffffffff8311610262576020808501948460051b01011161026257565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610dc1610019913690600401610d5c565b90612023565b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346102625760a06003193601126102625760043560843560ff8116810361026257610e246118c5565b610e38826000526006602052604060002090565b6004810180549169ffffffffffffffffffff83169283156110f15760028201805443116110c75784600584610f5d7f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8996000610fac96610f56610fdf9b610f2e89610ef2610f1e610fc69f6003015460405192839160208301956024359187917fffffffffffffffffffff0000000000000000000000000000000000000000000090604a9492845260b01b166020830152602a8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610296565b5190209560643560443588611ea8565b7fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008154169055565b5560019055565b610f65611e33565b905015610ffa575b019273ffffffffffffffffffffffffffffffffffffffff610fa2855473ffffffffffffffffffffffffffffffffffffffff1690565b9160501c16611f96565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600455565b81810161101e610fc6825473ffffffffffffffffffffffffffffffffffffffff1690565b33146110a45761109d61109561108561107f697fffffffffffffffffff8a60011c169461105833600c1b6000526007602052604060002090565b6110638782546116c2565b90555473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526007602052604060002090565b9182546116c2565b9055610f6d565b506110bc33600c1b6000526007602052604060002090565b61109d8482546116c2565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610af492818152019061060c565b346102625760406003193601126102625760043567ffffffffffffffff81116102625761115d903690600401610332565b6024359061116a82610314565b600091815191611179836125cb565b935b8381106111905760405180610756878261111b565b806111bd8473ffffffffffffffffffffffffffffffffffffffff6111b66001958761261a565b5116612502565b6111c7828861261a565b520161117b565b9060406003198301126102625767ffffffffffffffff9160043583811161026257816111fc91600401610332565b92602435908111610262578160238201121561026257806004013591611221836102fc565b9261122f6040519485610296565b80845260209260248486019260051b82010192831161026257602401905b82821061125b575050505090565b8380916112678461090a565b81520191019061124d565b3461026257611280366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d57825190811561131f57805182036113125790602084818080970194019260051b0101915b8281036112d0578380f35b8480916001825280518652835180604088205581517fbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df928880a3019101906112c5565b63ff633a3883526004601cfd5bfe5b34610262576020610a9e61133436610acf565b90612502565b3461026257611348366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d5782519081156113df57805182036113125790602084818080970194019260051b0101915b828103611398578380f35b84809181600c63cbc9d1c48152825188528551918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8880a30191019061138d565b63df95788383526004601cfd5b346102625760a06003193601126102625760043561140981610314565b6024359061141682610314565b6044359169ffffffffffffffffffff831683036102625767ffffffffffffffff916064358381116102625761144f903690600401610d5c565b90608435948511610262576107569561146f611477963690600401610d5c565b959094611a2f565b6040519081529081906020820190565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610a9e6114bd6020923690600401610c64565b61164a565b34610262576020600319360112610262576004356114df81610314565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361049d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1005b346102625760606003193601126102625760043561154f81610314565b60243560443567ffffffffffffffff8111610262577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916115a861159a611632933690600401610d5c565b906115a36118c5565b612023565b6115b2843361253c565b61163c575b6115f633600c1b85836b3fffffffffffffffffffffff6115f083859060205263739094b1600c52600c1c60005260016034600c20015490565b166124c3565b611601813386611f96565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600455005b61164584611959565b6115b7565b604051611674602082816116678183019687815193849201610b98565b8101038084520182610296565b5160201061131f575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116bd57565b611680565b919082018092116116bd57565b939273ffffffffffffffffffffffffffffffffffffffff85169333600c1b9484511561189b576117146117108263cbc9d1c4600c526000526020600c205490565b1590565b611871576b3fffffffffffffffffffffff61174882889060205263739094b1600c52600c1c60005260016034600c20015490565b16916117636bffffffffffffffffffffffff861680946116c2565b936a52b7d2dcc80cd2e40000008511611847577f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf97836117eb966117bc6118329a6117e2966117b06118c5565b80611837575b5061164a565b93605f1b17919060205263739094b1600c52600c1c6000526034600c2090600182015555565b30903390611900565b6117f56001600455565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2565b6118419033612221565b386117b6565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b6002600454146118d6576002600455565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d1560016000511417161561194b576000606052604052565b637939f4246000526004601cfd5b602081905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44576b3fffffffffffffffffffffff908260205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000521660016034600c20015573ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9295611a559073ffffffffffffffffffffffffffffffffffffffff9395966115a36118c5565b1691611a64611710848461253c565b611ce557611a728383612502565b9469ffffffffffffffffffff80831691828810611cbb5784600c1b96611a996005546116af565b946002611ab0876000526006602052604060002090565b0154431115611c9157611ac1611e33565b611ada8a611ad4600398949854436116c2565b9a612579565b611ae26102dc565b998c8b528960208c015260408b015260608a0152611b1060808a0193849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8a1660a08a015273ffffffffffffffffffffffffffffffffffffffff861660c08a01528315611b8e5750505091611b7c91611b819993611b768a6374dfee70600c52600c1c60005260206000205490565b91611d2c565b6122bf565b90611b8c6001600455565b565b9250819450809350611bb468056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611bcb57505050611bc6956122bf565b611b81565b15611bdb575050611bc6956122bf565b611c0c611c07611bf833600c1b6000526007602052604060002090565b54670de0b6b3a7640000900490565b611dba565b81611c2a611c24855169ffffffffffffffffffff1690565b92611d0f565b911611918215611c6e575b5050611c4457611bc6956122bf565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611c35565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156116bd57565b73ffffffffffffffffffffffffffffffffffffffff8293941692611d7e575b505003611d5457565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611daf579290611d88565b509150503880611d4b565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102d7576020926000926040525190600254617530fa906000519115611e2557565b63e10bf1cc6000526004601cfd5b611e3b611e61565b90600073ffffffffffffffffffffffffffffffffffffffff83163314610af45750600190565b33600052600160205260ff60406000205416600014611ea4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b3390565b918254611f6c5760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611f5f576060526040829052600c1b5415611f375750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611fd257603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561201e5760051b0190565b611fdf565b6000905b82821061204457501061203657565b63dfb035c96000526004601cfd5b9061206461205382858561200e565b356000526006602052604060002090565b61206d81612270565b80549060048082019081549073ffffffffffffffffffffffffffffffffffffffff94858360501c16916a52b7d2dcc80cd2e40000006120ea69ffffffffffffffffffff6b3fffffffffffffffffffffff6120e087879060205263739094b1600c52600c1c60005260016034600c20015490565b16961680966116c2565b116121f95750936121477f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da594610f2e6121bd9560059560019b9a999060205263739094b1600c52600c1c60005260016034600c2001908154019055565b0161216961107f825473ffffffffffffffffffffffffffffffffffffffff1690565b612187612180826000526007602052604060002090565b5460011c90565b68056bc75e2d6310000081116121de57506121af610fac916000526007602052604060002090565b68056bc75e2d631000009055565b916121c984888861200e565b60405190358152921691602090a20190612027565b906121f3906000526007602052604060002090565b55610fac565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b338103612262576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611c91576004015469ffffffffffffffffffff16156110f157565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116bd5760010190565b9261244c61240597967f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949673ffffffffffffffffffffffffffffffffffffffff94612358978960005260066020526124476040600020875181556020880151600182015560408801516002820155606088015160038201556123e36004820161238f60808b019d8e5169ffffffffffffffffffff1690565b829069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60a08a015181547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff0000000000000000000016179055565b600560c089019e8f5173ffffffffffffffffffffffffffffffffffffffff1690565b91019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6124c3565b61245f61245a600554612292565b600555565b6124be61249761248487995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176124f45760205263739094b1600c52600c1c60005260016034600c2001908154039055565b63ce3a3d376000526004601cfd5b600092913d15612510575050565b9091925060205263739094b1600c5260005260016034600c2001546b3fffffffffffffffffffffff1690565b600092913d1561254a575050565b9091925060205263739094b1600c5260005260016034600c200154605f1c6b3fffffffffffffffffffffff1690565b600092913d15612587575050565b9091925060205263739094b1600c526000526034600c205490565b6040516020810181811067ffffffffffffffff8211176102d75760405260008152906000368137565b906125d5826102fc565b6125e26040519182610296565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061261082946102fc565b0190602036910137565b805182101561201e5760209160051b010190565b9081511561277f5760008092805190612646826125cb565b92612650836125cb565b955b83811061266157505050509190565b806126826126716001938661261a565b516000526006602052604060002090565b546126b257612691818561261a565b5161269c828861261a565b52826126a8828a61261a565b5201925b92612652565b69ffffffffffffffffffff6126e060046126cf612671858961261a565b015469ffffffffffffffffffff1690565b16612715576126ef818561261a565b516126fa828861261a565b5261270e612708828a61261a565b60039052565b01926126ac565b6002612724612671838761261a565b015443111561275657612737818561261a565b51612742828861261a565b5261270e612750828a61261a565b60029052565b612760818561261a565b5161276b828861261a565b5261270e612779828a61261a565b60019052565b90506127896125a2565b90610af46125a256fea2646970667358221220056553307dee1aafd24d123d47fdccee5a2997cae6422e600d53cea9c80a955b64736f6c63430008130033", + "deployedBytecode": "0x6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102365780630d2a2d441461023157806313af40351461022c578063367821f014610227578063461f3120146101d757806349ef8448146102225780634b2ae9801461021d578063572b6c0514610218578063574983c8146102135780635fd8c7101461020e57806369cc6af4146102095780636d82d9e01461020457806377cd38a4146101ff5780637f94f65d146101fa57806380e1d302146101f557806384ab1d28146101f05780638da5cb5b146101eb5780638db564c2146101e6578063918dff57146101e15780639872dbfe146101dc57806398a26871146101d75780639b6d694d146101d2578063ad8f2eed146101cd578063b0983d39146101c8578063c52164c6146101c3578063c593dfd8146101be578063d1c07028146101b9578063d1ced2b0146101b4578063d4fac45d146101af578063d6e8b973146101aa578063dc43221c146101a5578063e449c52a146101a0578063f7d0e04b1461019b5763fb8c5ef00361000e57611532565b6114c2565b611487565b6113ec565b61133a565b611321565b611272565b61112c565b610dfb565b610dc7565b610d8d565b610d49565b610cd9565b6105eb565b610c46565b610bbb565b610b7a565b610b46565b610b10565b610af7565b610aa6565b610a6e565b610917565b6108ca565b610847565b6107e3565b610793565b610769565b6106ce565b610559565b6104c7565b61039a565b346102625760206003193601126102625760043560005260076020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102d757604052565b610267565b6040519060e0820182811067ffffffffffffffff8211176102d757604052565b67ffffffffffffffff81116102d75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361026257565b81601f8201121561026257803591610349836102fc565b926103576040519485610296565b808452602092838086019260051b820101928311610262578301905b828210610381575050505090565b838091833561038f81610314565b815201910190610373565b34610262576020806003193601126102625760043567ffffffffffffffff8111610262576103cc903690600401610332565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361049d57805181830192849160051b830181013d1515855b8115610469575b50505060405192818401908285525180915260408401949160005b828110610453577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b8351851687529581019592810192600101610424565b90838260018298969499979951600c1b55019083821015610491579150959395949294610402565b50959395949294610409565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576004356104e481610314565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361049d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b3461026257602060031936011261026257600435600052600660205260e060406000208054906005600182015491600281015460038201549060048301549273ffffffffffffffffffffffffffffffffffffffff9485910154169460405196875260208701526040860152606085015269ffffffffffffffffffff8116608085015260501c1660a083015260c0820152f35b34610262576020600319360112610262576020600435546040519015158152f35b90815180825260208080930193019160005b82811061062c575050505090565b83518552938101939281019260010161061e565b906106539060408352604083019061060c565b81810360209283015282518082529082019282019160009190825b82811061067d57505050505090565b909192939485516004808210156106a25750815282019482019392919060010161066e565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610262576020806003193601126102625760043567ffffffffffffffff811161026257366023820112156102625780600401359061070c826102fc565b9161071a6040519384610296565b80835260248484019160051b8301019136831161026257602401905b82821061075a576107468461262e565b9061075660405192839283610640565b0390f35b81358152908401908401610736565b3461026257602060031936011261026257602060043561078881610314565b60405190600c1b8152f35b346102625760206003193601126102625773ffffffffffffffffffffffffffffffffffffffff6004356107c581610314565b166000526001602052602060ff604060002054166040519015158152f35b346102625760206003193601126102625760043573ffffffffffffffffffffffffffffffffffffffff60005416330361049d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600355604051908152a1005b34610262576000806003193601126108c75773ffffffffffffffffffffffffffffffffffffffff815416330361049d57478180808084335af1156108ba576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b346102625760206003193601126102625760206109006004356108ec81610314565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3590811515820361026257565b346102625760406003193601126102625760043561093481610314565b602435801515810361026257602082905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44577fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4991610a3f918460205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000526b3fffffffffffffffffffffff82605f1b91161760016034600c20015560405191829173ffffffffffffffffffffffffffffffffffffffff3396168390929160209073ffffffffffffffffffffffffffffffffffffffff60408401951683521515910152565b0390a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576020610a9e6004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461026257604060031936011261026257610019600435610ac681610314565b60243590612221565b600319604091011261026257600435610ae781610314565b90602435610af481610314565b90565b34610262576020610900610b0a36610acf565b9061253c565b3461026257602060031936011261026257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610262576000600319360112610262576020600554604051908152f35b60005b838110610bab5750506000910152565b8181015183820152602001610b9b565b3461026257610bd2610bcc36610acf565b90612579565b604051906020820190815260208252604082019180831067ffffffffffffffff8411176102d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409385855260208652610c3d845180928160608801526080870190610b98565b01168101030190f35b34610262576000600319360112610262576020600354604051908152f35b81601f820112156102625780359067ffffffffffffffff82116102d75760405192610cb760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610296565b8284526020838301011161026257816000926020809301838601378301015290565b346102625760a060031936011261026257600435610cf681610314565b602435906bffffffffffffffffffffffff821682036102625760443567ffffffffffffffff811161026257610d2f903690600401610c64565b6064359081151582036102625761001993608435936116cf565b34610262576020610a9e610bcc36610acf565b9181601f840112156102625782359167ffffffffffffffff8311610262576020808501948460051b01011161026257565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610dc1610019913690600401610d5c565b90612023565b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346102625760a06003193601126102625760043560843560ff8116810361026257610e246118c5565b610e38826000526006602052604060002090565b6004810180549169ffffffffffffffffffff83169283156110f15760028201805443116110c75784600584610f5d7f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8996000610fac96610f56610fdf9b610f2e89610ef2610f1e610fc69f6003015460405192839160208301956024359187917fffffffffffffffffffff0000000000000000000000000000000000000000000090604a9492845260b01b166020830152602a8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610296565b5190209560643560443588611ea8565b7fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008154169055565b5560019055565b610f65611e33565b905015610ffa575b019273ffffffffffffffffffffffffffffffffffffffff610fa2855473ffffffffffffffffffffffffffffffffffffffff1690565b9160501c16611f96565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600455565b81810161101e610fc6825473ffffffffffffffffffffffffffffffffffffffff1690565b33146110a45761109d61109561108561107f697fffffffffffffffffff8a60011c169461105833600c1b6000526007602052604060002090565b6110638782546116c2565b90555473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526007602052604060002090565b9182546116c2565b9055610f6d565b506110bc33600c1b6000526007602052604060002090565b61109d8482546116c2565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610af492818152019061060c565b346102625760406003193601126102625760043567ffffffffffffffff81116102625761115d903690600401610332565b6024359061116a82610314565b600091815191611179836125cb565b935b8381106111905760405180610756878261111b565b806111bd8473ffffffffffffffffffffffffffffffffffffffff6111b66001958761261a565b5116612502565b6111c7828861261a565b520161117b565b9060406003198301126102625767ffffffffffffffff9160043583811161026257816111fc91600401610332565b92602435908111610262578160238201121561026257806004013591611221836102fc565b9261122f6040519485610296565b80845260209260248486019260051b82010192831161026257602401905b82821061125b575050505090565b8380916112678461090a565b81520191019061124d565b3461026257611280366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d57825190811561131f57805182036113125790602084818080970194019260051b0101915b8281036112d0578380f35b8480916001825280518652835180604088205581517fbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df928880a3019101906112c5565b63ff633a3883526004601cfd5bfe5b34610262576020610a9e61133436610acf565b90612502565b3461026257611348366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d5782519081156113df57805182036113125790602084818080970194019260051b0101915b828103611398578380f35b84809181600c63cbc9d1c48152825188528551918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8880a30191019061138d565b63df95788383526004601cfd5b346102625760a06003193601126102625760043561140981610314565b6024359061141682610314565b6044359169ffffffffffffffffffff831683036102625767ffffffffffffffff916064358381116102625761144f903690600401610d5c565b90608435948511610262576107569561146f611477963690600401610d5c565b959094611a2f565b6040519081529081906020820190565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610a9e6114bd6020923690600401610c64565b61164a565b34610262576020600319360112610262576004356114df81610314565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361049d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1005b346102625760606003193601126102625760043561154f81610314565b60243560443567ffffffffffffffff8111610262577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916115a861159a611632933690600401610d5c565b906115a36118c5565b612023565b6115b2843361253c565b61163c575b6115f633600c1b85836b3fffffffffffffffffffffff6115f083859060205263739094b1600c52600c1c60005260016034600c20015490565b166124c3565b611601813386611f96565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600455005b61164584611959565b6115b7565b604051611674602082816116678183019687815193849201610b98565b8101038084520182610296565b5160201061131f575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116bd57565b611680565b919082018092116116bd57565b939273ffffffffffffffffffffffffffffffffffffffff85169333600c1b9484511561189b576117146117108263cbc9d1c4600c526000526020600c205490565b1590565b611871576b3fffffffffffffffffffffff61174882889060205263739094b1600c52600c1c60005260016034600c20015490565b16916117636bffffffffffffffffffffffff861680946116c2565b936a52b7d2dcc80cd2e40000008511611847577f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf97836117eb966117bc6118329a6117e2966117b06118c5565b80611837575b5061164a565b93605f1b17919060205263739094b1600c52600c1c6000526034600c2090600182015555565b30903390611900565b6117f56001600455565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2565b6118419033612221565b386117b6565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b6002600454146118d6576002600455565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d1560016000511417161561194b576000606052604052565b637939f4246000526004601cfd5b602081905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44576b3fffffffffffffffffffffff908260205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000521660016034600c20015573ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9295611a559073ffffffffffffffffffffffffffffffffffffffff9395966115a36118c5565b1691611a64611710848461253c565b611ce557611a728383612502565b9469ffffffffffffffffffff80831691828810611cbb5784600c1b96611a996005546116af565b946002611ab0876000526006602052604060002090565b0154431115611c9157611ac1611e33565b611ada8a611ad4600398949854436116c2565b9a612579565b611ae26102dc565b998c8b528960208c015260408b015260608a0152611b1060808a0193849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8a1660a08a015273ffffffffffffffffffffffffffffffffffffffff861660c08a01528315611b8e5750505091611b7c91611b819993611b768a6374dfee70600c52600c1c60005260206000205490565b91611d2c565b6122bf565b90611b8c6001600455565b565b9250819450809350611bb468056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611bcb57505050611bc6956122bf565b611b81565b15611bdb575050611bc6956122bf565b611c0c611c07611bf833600c1b6000526007602052604060002090565b54670de0b6b3a7640000900490565b611dba565b81611c2a611c24855169ffffffffffffffffffff1690565b92611d0f565b911611918215611c6e575b5050611c4457611bc6956122bf565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611c35565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156116bd57565b73ffffffffffffffffffffffffffffffffffffffff8293941692611d7e575b505003611d5457565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611daf579290611d88565b509150503880611d4b565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102d7576020926000926040525190600254617530fa906000519115611e2557565b63e10bf1cc6000526004601cfd5b611e3b611e61565b90600073ffffffffffffffffffffffffffffffffffffffff83163314610af45750600190565b33600052600160205260ff60406000205416600014611ea4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b3390565b918254611f6c5760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611f5f576060526040829052600c1b5415611f375750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611fd257603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561201e5760051b0190565b611fdf565b6000905b82821061204457501061203657565b63dfb035c96000526004601cfd5b9061206461205382858561200e565b356000526006602052604060002090565b61206d81612270565b80549060048082019081549073ffffffffffffffffffffffffffffffffffffffff94858360501c16916a52b7d2dcc80cd2e40000006120ea69ffffffffffffffffffff6b3fffffffffffffffffffffff6120e087879060205263739094b1600c52600c1c60005260016034600c20015490565b16961680966116c2565b116121f95750936121477f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da594610f2e6121bd9560059560019b9a999060205263739094b1600c52600c1c60005260016034600c2001908154019055565b0161216961107f825473ffffffffffffffffffffffffffffffffffffffff1690565b612187612180826000526007602052604060002090565b5460011c90565b68056bc75e2d6310000081116121de57506121af610fac916000526007602052604060002090565b68056bc75e2d631000009055565b916121c984888861200e565b60405190358152921691602090a20190612027565b906121f3906000526007602052604060002090565b55610fac565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b338103612262576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611c91576004015469ffffffffffffffffffff16156110f157565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116bd5760010190565b9261244c61240597967f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949673ffffffffffffffffffffffffffffffffffffffff94612358978960005260066020526124476040600020875181556020880151600182015560408801516002820155606088015160038201556123e36004820161238f60808b019d8e5169ffffffffffffffffffff1690565b829069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60a08a015181547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff0000000000000000000016179055565b600560c089019e8f5173ffffffffffffffffffffffffffffffffffffffff1690565b91019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6124c3565b61245f61245a600554612292565b600555565b6124be61249761248487995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176124f45760205263739094b1600c52600c1c60005260016034600c2001908154039055565b63ce3a3d376000526004601cfd5b600092913d15612510575050565b9091925060205263739094b1600c5260005260016034600c2001546b3fffffffffffffffffffffff1690565b600092913d1561254a575050565b9091925060205263739094b1600c5260005260016034600c200154605f1c6b3fffffffffffffffffffffff1690565b600092913d15612587575050565b9091925060205263739094b1600c526000526034600c205490565b6040516020810181811067ffffffffffffffff8211176102d75760405260008152906000368137565b906125d5826102fc565b6125e26040519182610296565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061261082946102fc565b0190602036910137565b805182101561201e5760209160051b010190565b9081511561277f5760008092805190612646826125cb565b92612650836125cb565b955b83811061266157505050509190565b806126826126716001938661261a565b516000526006602052604060002090565b546126b257612691818561261a565b5161269c828861261a565b52826126a8828a61261a565b5201925b92612652565b69ffffffffffffffffffff6126e060046126cf612671858961261a565b015469ffffffffffffffffffff1690565b16612715576126ef818561261a565b516126fa828861261a565b5261270e612708828a61261a565b60039052565b01926126ac565b6002612724612671838761261a565b015443111561275657612737818561261a565b51612742828861261a565b5261270e612750828a61261a565b60029052565b612760818561261a565b5161276b828861261a565b5261270e612779828a61261a565b60019052565b90506127896125a2565b90610af46125a256fea2646970667358221220056553307dee1aafd24d123d47fdccee5a2997cae6422e600d53cea9c80a955b64736f6c63430008130033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/core/BaseUtils.sol b/contracts/core/BaseUtils.sol index 389e604..f4bc40a 100644 --- a/contracts/core/BaseUtils.sol +++ b/contracts/core/BaseUtils.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; -import { OwnerSettings } from "./OwnerSettings.sol"; +import { ERC20, OwnerSettings } from "./OwnerSettings.sol"; import { ECDSA } from "../lib/utils/ECDSA.sol"; import { MerkleProofLib as Merkle } from "../lib/utils/MerkleProofLib.sol"; @@ -92,6 +92,76 @@ abstract contract BaseUtils is } } + function _setSellerBalance( + uint256 _sellerKey, + ERC20 _erc20, + uint256 _packed, + bytes32 _pixTarget + ) internal { + assembly { + mstore(0x20, _erc20) + mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) + mstore(0x00, shr(0xc, _sellerKey)) + let _loc := keccak256(0x0c, 0x34) + sstore(add(_loc, 0x01), _packed) + sstore(_loc, _pixTarget) + } + } + + function _setValidState( + uint256 _sellerKey, + ERC20 _erc20, + uint256 _packed + ) internal { + assembly { + mstore(0x20, _erc20) + mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) + mstore(0x00, shr(0xc, _sellerKey)) + let _loc := keccak256(0x0c, 0x34) + sstore(add(_loc, 0x01), _packed) + } + } + + function _addSellerBalance( + uint256 _sellerKey, + ERC20 _erc20, + uint256 _amount + ) internal { + assembly { + mstore(0x20, _erc20) + mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) + mstore(0x00, shr(0xc, _sellerKey)) + let _loc := add(keccak256(0x0c, 0x34), 0x01) + sstore(_loc, add(sload(_loc), _amount)) + } + } + + function _decSellerBalance( + uint256 _sellerKey, + ERC20 _erc20, + uint256 _amount + ) internal { + assembly { + mstore(0x20, _erc20) + mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) + mstore(0x00, shr(0xc, _sellerKey)) + let _loc := add(keccak256(0x0c, 0x34), 0x01) + sstore(_loc, sub(sload(_loc), _amount)) + } + } + + function __sellerBalance( + uint256 _sellerKey, + ERC20 _erc20 + ) internal view returns (uint256 _packed) { + assembly { + mstore(0x20, _erc20) + mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) + mstore(0x00, shr(0xc, _sellerKey)) + _packed := sload(add(keccak256(0x0c, 0x34), 0x01)) + } + } + /// @notice Public method that handles `address` /// to `uint256` safe type casting. /// @dev Function sighash: 0x4b2ae980. @@ -100,7 +170,7 @@ abstract contract BaseUtils is ) public pure returns (uint256 _key) { // _key = uint256(uint160(address(_addr))) << 12; assembly { - _key := shl(12, _addr) + _key := shl(0xc, _addr) } } @@ -109,7 +179,7 @@ abstract contract BaseUtils is ) public pure returns (address _addr) { // _addr = address(uint160(uint256(_key >> 12))); assembly { - _addr := shr(12, _key) + _addr := shr(0xc, _key) } } } diff --git a/contracts/p2pix.sol b/contracts/p2pix.sol index e2ef07b..56569e5 100644 --- a/contracts/p2pix.sol +++ b/contracts/p2pix.sol @@ -585,55 +585,4 @@ contract P2PIX is BaseUtils { } return (sortedIDs, status); } - - function _setSellerBalance(uint256 _sellerKey, ERC20 _erc20, uint256 _packed, bytes32 _pixTarget) private { - assembly { - mstore(0x20, _erc20) - mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) - mstore(0x00, shr(12, _sellerKey)) - let _loc := keccak256(0x0c, 0x34) - sstore(add(_loc, 0x01), _packed) - sstore(_loc, _pixTarget) - } - } - - function _setValidState(uint256 _sellerKey, ERC20 _erc20, uint256 _packed) private { - assembly { - mstore(0x20, _erc20) - mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) - mstore(0x00, shr(12, _sellerKey)) - let _loc := keccak256(0x0c, 0x34) - sstore(add(_loc, 0x01), _packed) - } - } - - function _addSellerBalance(uint256 _sellerKey, ERC20 _erc20, uint256 _amount) private { - assembly { - mstore(0x20, _erc20) - mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) - mstore(0x00, shr(12, _sellerKey)) - let _loc := add(keccak256(0x0c, 0x34), 0x01) - sstore(_loc, add(sload(_loc), _amount)) - } - } - - function _decSellerBalance(uint256 _sellerKey, ERC20 _erc20, uint256 _amount) private { - assembly { - mstore(0x20, _erc20) - mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) - mstore(0x00, shr(12, _sellerKey)) - let _loc := add(keccak256(0x0c, 0x34), 0x01) - sstore(_loc, sub(sload(_loc), _amount)) - } - } - - function __sellerBalance(uint256 _sellerKey, ERC20 _erc20) private view returns(uint256 _packed) { - assembly { - mstore(0x20, _erc20) - mstore(0x0c, _SELLER_BALANCE_SLOT_SEED) - mstore(0x00, shr(12, _sellerKey)) - _packed := sload(add(keccak256(0x0c, 0x34), 0x01)) - } - } - } diff --git a/src/types/factories/p2pix.sol/P2PIX__factory.ts b/src/types/factories/p2pix.sol/P2PIX__factory.ts index e99ba9c..55d5c36 100644 --- a/src/types/factories/p2pix.sol/P2PIX__factory.ts +++ b/src/types/factories/p2pix.sol/P2PIX__factory.ts @@ -1129,7 +1129,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405262002c0a80380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516127c89081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816003556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600455565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102365780630d2a2d441461023157806313af40351461022c578063367821f014610227578063461f3120146101d757806349ef8448146102225780634b2ae9801461021d578063572b6c0514610218578063574983c8146102135780635fd8c7101461020e57806369cc6af4146102095780636d82d9e01461020457806377cd38a4146101ff5780637f94f65d146101fa57806380e1d302146101f557806384ab1d28146101f05780638da5cb5b146101eb5780638db564c2146101e6578063918dff57146101e15780639872dbfe146101dc57806398a26871146101d75780639b6d694d146101d2578063ad8f2eed146101cd578063b0983d39146101c8578063c52164c6146101c3578063c593dfd8146101be578063d1c07028146101b9578063d1ced2b0146101b4578063d4fac45d146101af578063d6e8b973146101aa578063dc43221c146101a5578063e449c52a146101a0578063f7d0e04b1461019b5763fb8c5ef00361000e57611532565b6114c2565b611487565b6113ec565b61133a565b611321565b611272565b61112c565b610dfb565b610dc7565b610d8d565b610d49565b610cd9565b6105eb565b610c46565b610bbb565b610b7a565b610b46565b610b10565b610af7565b610aa6565b610a6e565b610917565b6108ca565b610847565b6107e3565b610793565b610769565b6106ce565b610559565b6104c7565b61039a565b346102625760206003193601126102625760043560005260076020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102d757604052565b610267565b6040519060e0820182811067ffffffffffffffff8211176102d757604052565b67ffffffffffffffff81116102d75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361026257565b81601f8201121561026257803591610349836102fc565b926103576040519485610296565b808452602092838086019260051b820101928311610262578301905b828210610381575050505090565b838091833561038f81610314565b815201910190610373565b34610262576020806003193601126102625760043567ffffffffffffffff8111610262576103cc903690600401610332565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361049d57805181830192849160051b830181013d1515855b8115610469575b50505060405192818401908285525180915260408401949160005b828110610453577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b8351851687529581019592810192600101610424565b90838260018298969499979951600c1b55019083821015610491579150959395949294610402565b50959395949294610409565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576004356104e481610314565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361049d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b3461026257602060031936011261026257600435600052600660205260e060406000208054906005600182015491600281015460038201549060048301549273ffffffffffffffffffffffffffffffffffffffff9485910154169460405196875260208701526040860152606085015269ffffffffffffffffffff8116608085015260501c1660a083015260c0820152f35b34610262576020600319360112610262576020600435546040519015158152f35b90815180825260208080930193019160005b82811061062c575050505090565b83518552938101939281019260010161061e565b906106539060408352604083019061060c565b81810360209283015282518082529082019282019160009190825b82811061067d57505050505090565b909192939485516004808210156106a25750815282019482019392919060010161066e565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610262576020806003193601126102625760043567ffffffffffffffff811161026257366023820112156102625780600401359061070c826102fc565b9161071a6040519384610296565b80835260248484019160051b8301019136831161026257602401905b82821061075a576107468461262e565b9061075660405192839283610640565b0390f35b81358152908401908401610736565b3461026257602060031936011261026257602060043561078881610314565b60405190600c1b8152f35b346102625760206003193601126102625773ffffffffffffffffffffffffffffffffffffffff6004356107c581610314565b166000526001602052602060ff604060002054166040519015158152f35b346102625760206003193601126102625760043573ffffffffffffffffffffffffffffffffffffffff60005416330361049d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600355604051908152a1005b34610262576000806003193601126108c75773ffffffffffffffffffffffffffffffffffffffff815416330361049d57478180808084335af1156108ba576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b346102625760206003193601126102625760206109006004356108ec81610314565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3590811515820361026257565b346102625760406003193601126102625760043561093481610314565b602435801515810361026257602082905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44577fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4991610a3f918460205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000526b3fffffffffffffffffffffff82605f1b91161760016034600c20015560405191829173ffffffffffffffffffffffffffffffffffffffff3396168390929160209073ffffffffffffffffffffffffffffffffffffffff60408401951683521515910152565b0390a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576020610a9e6004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461026257604060031936011261026257610019600435610ac681610314565b60243590612221565b600319604091011261026257600435610ae781610314565b90602435610af481610314565b90565b34610262576020610900610b0a36610acf565b9061253c565b3461026257602060031936011261026257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610262576000600319360112610262576020600554604051908152f35b60005b838110610bab5750506000910152565b8181015183820152602001610b9b565b3461026257610bd2610bcc36610acf565b90612579565b604051906020820190815260208252604082019180831067ffffffffffffffff8411176102d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409385855260208652610c3d845180928160608801526080870190610b98565b01168101030190f35b34610262576000600319360112610262576020600354604051908152f35b81601f820112156102625780359067ffffffffffffffff82116102d75760405192610cb760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610296565b8284526020838301011161026257816000926020809301838601378301015290565b346102625760a060031936011261026257600435610cf681610314565b602435906bffffffffffffffffffffffff821682036102625760443567ffffffffffffffff811161026257610d2f903690600401610c64565b6064359081151582036102625761001993608435936116cf565b34610262576020610a9e610bcc36610acf565b9181601f840112156102625782359167ffffffffffffffff8311610262576020808501948460051b01011161026257565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610dc1610019913690600401610d5c565b90612023565b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346102625760a06003193601126102625760043560843560ff8116810361026257610e246118c5565b610e38826000526006602052604060002090565b6004810180549169ffffffffffffffffffff83169283156110f15760028201805443116110c75784600584610f5d7f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8996000610fac96610f56610fdf9b610f2e89610ef2610f1e610fc69f6003015460405192839160208301956024359187917fffffffffffffffffffff0000000000000000000000000000000000000000000090604a9492845260b01b166020830152602a8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610296565b5190209560643560443588611ea8565b7fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008154169055565b5560019055565b610f65611e33565b905015610ffa575b019273ffffffffffffffffffffffffffffffffffffffff610fa2855473ffffffffffffffffffffffffffffffffffffffff1690565b9160501c16611f96565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600455565b81810161101e610fc6825473ffffffffffffffffffffffffffffffffffffffff1690565b33146110a45761109d61109561108561107f697fffffffffffffffffff8a60011c169461105833600c1b6000526007602052604060002090565b6110638782546116c2565b90555473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526007602052604060002090565b9182546116c2565b9055610f6d565b506110bc33600c1b6000526007602052604060002090565b61109d8482546116c2565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610af492818152019061060c565b346102625760406003193601126102625760043567ffffffffffffffff81116102625761115d903690600401610332565b6024359061116a82610314565b600091815191611179836125cb565b935b8381106111905760405180610756878261111b565b806111bd8473ffffffffffffffffffffffffffffffffffffffff6111b66001958761261a565b5116612502565b6111c7828861261a565b520161117b565b9060406003198301126102625767ffffffffffffffff9160043583811161026257816111fc91600401610332565b92602435908111610262578160238201121561026257806004013591611221836102fc565b9261122f6040519485610296565b80845260209260248486019260051b82010192831161026257602401905b82821061125b575050505090565b8380916112678461090a565b81520191019061124d565b3461026257611280366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d57825190811561131f57805182036113125790602084818080970194019260051b0101915b8281036112d0578380f35b8480916001825280518652835180604088205581517fbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df928880a3019101906112c5565b63ff633a3883526004601cfd5bfe5b34610262576020610a9e61133436610acf565b90612502565b3461026257611348366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d5782519081156113df57805182036113125790602084818080970194019260051b0101915b828103611398578380f35b84809181600c63cbc9d1c48152825188528551918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8880a30191019061138d565b63df95788383526004601cfd5b346102625760a06003193601126102625760043561140981610314565b6024359061141682610314565b6044359169ffffffffffffffffffff831683036102625767ffffffffffffffff916064358381116102625761144f903690600401610d5c565b90608435948511610262576107569561146f611477963690600401610d5c565b959094611a2f565b6040519081529081906020820190565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610a9e6114bd6020923690600401610c64565b61164a565b34610262576020600319360112610262576004356114df81610314565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361049d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1005b346102625760606003193601126102625760043561154f81610314565b60243560443567ffffffffffffffff8111610262577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916115a861159a611632933690600401610d5c565b906115a36118c5565b612023565b6115b2843361253c565b61163c575b6115f633600c1b85836b3fffffffffffffffffffffff6115f083859060205263739094b1600c52600c1c60005260016034600c20015490565b166124c3565b611601813386611f96565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600455005b61164584611959565b6115b7565b604051611674602082816116678183019687815193849201610b98565b8101038084520182610296565b5160201061131f575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116bd57565b611680565b919082018092116116bd57565b939273ffffffffffffffffffffffffffffffffffffffff85169333600c1b9484511561189b576117146117108263cbc9d1c4600c526000526020600c205490565b1590565b611871576b3fffffffffffffffffffffff61174882889060205263739094b1600c52600c1c60005260016034600c20015490565b16916117636bffffffffffffffffffffffff861680946116c2565b936a52b7d2dcc80cd2e40000008511611847577f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf97836117eb966117bc6118329a6117e2966117b06118c5565b80611837575b5061164a565b93605f1b17919060205263739094b1600c52600c1c6000526034600c2090600182015555565b30903390611900565b6117f56001600455565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2565b6118419033612221565b386117b6565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b6002600454146118d6576002600455565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d1560016000511417161561194b576000606052604052565b637939f4246000526004601cfd5b602081905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44576b3fffffffffffffffffffffff908260205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000521660016034600c20015573ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9295611a559073ffffffffffffffffffffffffffffffffffffffff9395966115a36118c5565b1691611a64611710848461253c565b611ce557611a728383612502565b9469ffffffffffffffffffff80831691828810611cbb5784600c1b96611a996005546116af565b946002611ab0876000526006602052604060002090565b0154431115611c9157611ac1611e33565b611ada8a611ad4600398949854436116c2565b9a612579565b611ae26102dc565b998c8b528960208c015260408b015260608a0152611b1060808a0193849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8a1660a08a015273ffffffffffffffffffffffffffffffffffffffff861660c08a01528315611b8e5750505091611b7c91611b819993611b768a6374dfee70600c52600c1c60005260206000205490565b91611d2c565b6122bf565b90611b8c6001600455565b565b9250819450809350611bb468056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611bcb57505050611bc6956122bf565b611b81565b15611bdb575050611bc6956122bf565b611c0c611c07611bf833600c1b6000526007602052604060002090565b54670de0b6b3a7640000900490565b611dba565b81611c2a611c24855169ffffffffffffffffffff1690565b92611d0f565b911611918215611c6e575b5050611c4457611bc6956122bf565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611c35565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156116bd57565b73ffffffffffffffffffffffffffffffffffffffff8293941692611d7e575b505003611d5457565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611daf579290611d88565b509150503880611d4b565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102d7576020926000926040525190600254617530fa906000519115611e2557565b63e10bf1cc6000526004601cfd5b611e3b611e61565b90600073ffffffffffffffffffffffffffffffffffffffff83163314610af45750600190565b33600052600160205260ff60406000205416600014611ea4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b3390565b918254611f6c5760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611f5f576060526040829052600c1b5415611f375750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611fd257603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561201e5760051b0190565b611fdf565b6000905b82821061204457501061203657565b63dfb035c96000526004601cfd5b9061206461205382858561200e565b356000526006602052604060002090565b61206d81612270565b80549060048082019081549073ffffffffffffffffffffffffffffffffffffffff94858360501c16916a52b7d2dcc80cd2e40000006120ea69ffffffffffffffffffff6b3fffffffffffffffffffffff6120e087879060205263739094b1600c52600c1c60005260016034600c20015490565b16961680966116c2565b116121f95750936121477f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da594610f2e6121bd9560059560019b9a999060205263739094b1600c52600c1c60005260016034600c2001908154019055565b0161216961107f825473ffffffffffffffffffffffffffffffffffffffff1690565b612187612180826000526007602052604060002090565b5460011c90565b68056bc75e2d6310000081116121de57506121af610fac916000526007602052604060002090565b68056bc75e2d631000009055565b916121c984888861200e565b60405190358152921691602090a20190612027565b906121f3906000526007602052604060002090565b55610fac565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b338103612262576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611c91576004015469ffffffffffffffffffff16156110f157565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116bd5760010190565b9261244c61240597967f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949673ffffffffffffffffffffffffffffffffffffffff94612358978960005260066020526124476040600020875181556020880151600182015560408801516002820155606088015160038201556123e36004820161238f60808b019d8e5169ffffffffffffffffffff1690565b829069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60a08a015181547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff0000000000000000000016179055565b600560c089019e8f5173ffffffffffffffffffffffffffffffffffffffff1690565b91019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6124c3565b61245f61245a600554612292565b600555565b6124be61249761248487995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176124f45760205263739094b1600c52600c1c60005260016034600c2001908154039055565b63ce3a3d376000526004601cfd5b600092913d15612510575050565b9091925060205263739094b1600c5260005260016034600c2001546b3fffffffffffffffffffffff1690565b600092913d1561254a575050565b9091925060205263739094b1600c5260005260016034600c200154605f1c6b3fffffffffffffffffffffff1690565b600092913d15612587575050565b9091925060205263739094b1600c526000526034600c205490565b6040516020810181811067ffffffffffffffff8211176102d75760405260008152906000368137565b906125d5826102fc565b6125e26040519182610296565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061261082946102fc565b0190602036910137565b805182101561201e5760209160051b010190565b9081511561277f5760008092805190612646826125cb565b92612650836125cb565b955b83811061266157505050509190565b806126826126716001938661261a565b516000526006602052604060002090565b546126b257612691818561261a565b5161269c828861261a565b52826126a8828a61261a565b5201925b92612652565b69ffffffffffffffffffff6126e060046126cf612671858961261a565b015469ffffffffffffffffffff1690565b16612715576126ef818561261a565b516126fa828861261a565b5261270e612708828a61261a565b60039052565b01926126ac565b6002612724612671838761261a565b015443111561275657612737818561261a565b51612742828861261a565b5261270e612750828a61261a565b60029052565b612760818561261a565b5161276b828861261a565b5261270e612779828a61261a565b60019052565b90506127896125a2565b90610af46125a256fea2646970667358221220f49567e90ed620a29f8840f9786e491e73bd50793a4a3d9e96837fbbd97a353b64736f6c63430008130033"; + "0x608060405262002c0a80380380620000178162000126565b928339810160a0828203126200010b5781516020808401519093916001600160401b03918281116200010b5784620000519185016200017f565b9062000060604085016200016a565b9260608501518181116200010b57866200007c9187016200017f565b9460808101519182116200010b57019480601f870112156200010b578551620000af620000a98262000152565b62000126565b96888089848152019260051b8201019283116200010b578801905b828210620000f157505050620000e19550620001e6565b6040516127c89081620004428239f35b815180151581036200010b578152908801908801620000ca565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200014c57604052565b62000110565b6001600160401b0381116200014c5760051b60200190565b51906001600160a01b03821682036200010b57565b9080601f830112156200010b578151906200019e620000a98362000152565b9182938184526020808095019260051b8201019283116200010b578301905b828210620001cc575050505090565b838091620001da846200016a565b815201910190620001bd565b600080546001600160a01b031916339081178255929695949392817f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768180a3816003556040519182527f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851160208093a18651878301979060051b810183013d1515895b811562000306575b5050506040519280840191818552518092526040840198925b828110620002e85750505050907f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d782620002d593620002db97980390a16001600160a01b031662000337565b62000390565b620002e66001600455565b565b83516001600160a01b03168a52988101989281019260010162000289565b9085826001829697989451600c1b550190838210156200032c5791509493929462000268565b509493929462000270565b6000546001600160a01b0390811633036200037f57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1565b6040516282b42960e81b8152600490fd5b60008054919290916001600160a01b031633036200037f5782519182156200043457815183036200042757602092919284818080970195019360051b0101925b838103620003df575050505050565b84809181600c63cbc9d1c48152825186528651918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8680a301920191620003d0565b63ff633a3890526004601cfd5b63df95788390526004601cfdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806304937320146102365780630d2a2d441461023157806313af40351461022c578063367821f014610227578063461f3120146101d757806349ef8448146102225780634b2ae9801461021d578063572b6c0514610218578063574983c8146102135780635fd8c7101461020e57806369cc6af4146102095780636d82d9e01461020457806377cd38a4146101ff5780637f94f65d146101fa57806380e1d302146101f557806384ab1d28146101f05780638da5cb5b146101eb5780638db564c2146101e6578063918dff57146101e15780639872dbfe146101dc57806398a26871146101d75780639b6d694d146101d2578063ad8f2eed146101cd578063b0983d39146101c8578063c52164c6146101c3578063c593dfd8146101be578063d1c07028146101b9578063d1ced2b0146101b4578063d4fac45d146101af578063d6e8b973146101aa578063dc43221c146101a5578063e449c52a146101a0578063f7d0e04b1461019b5763fb8c5ef00361000e57611532565b6114c2565b611487565b6113ec565b61133a565b611321565b611272565b61112c565b610dfb565b610dc7565b610d8d565b610d49565b610cd9565b6105eb565b610c46565b610bbb565b610b7a565b610b46565b610b10565b610af7565b610aa6565b610a6e565b610917565b6108ca565b610847565b6107e3565b610793565b610769565b6106ce565b610559565b6104c7565b61039a565b346102625760206003193601126102625760043560005260076020526020604060002054604051908152f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102d757604052565b610267565b6040519060e0820182811067ffffffffffffffff8211176102d757604052565b67ffffffffffffffff81116102d75760051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81160361026257565b81601f8201121561026257803591610349836102fc565b926103576040519485610296565b808452602092838086019260051b820101928311610262578301905b828210610381575050505090565b838091833561038f81610314565b815201910190610373565b34610262576020806003193601126102625760043567ffffffffffffffff8111610262576103cc903690600401610332565b9073ffffffffffffffffffffffffffffffffffffffff918260005416330361049d57805181830192849160051b830181013d1515855b8115610469575b50505060405192818401908285525180915260408401949160005b828110610453577f14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d786880387a1005b8351851687529581019592810192600101610424565b90838260018298969499979951600c1b55019083821015610491579150959395949294610402565b50959395949294610409565b60046040517f82b42900000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576004356104e481610314565b600090815473ffffffffffffffffffffffffffffffffffffffff808216330361049d577fffffffffffffffffffffffff0000000000000000000000000000000000000000921691829116178255337f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d768380a380f35b3461026257602060031936011261026257600435600052600660205260e060406000208054906005600182015491600281015460038201549060048301549273ffffffffffffffffffffffffffffffffffffffff9485910154169460405196875260208701526040860152606085015269ffffffffffffffffffff8116608085015260501c1660a083015260c0820152f35b34610262576020600319360112610262576020600435546040519015158152f35b90815180825260208080930193019160005b82811061062c575050505090565b83518552938101939281019260010161061e565b906106539060408352604083019061060c565b81810360209283015282518082529082019282019160009190825b82811061067d57505050505090565b909192939485516004808210156106a25750815282019482019392919060010161066e565b8660216024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b34610262576020806003193601126102625760043567ffffffffffffffff811161026257366023820112156102625780600401359061070c826102fc565b9161071a6040519384610296565b80835260248484019160051b8301019136831161026257602401905b82821061075a576107468461262e565b9061075660405192839283610640565b0390f35b81358152908401908401610736565b3461026257602060031936011261026257602060043561078881610314565b60405190600c1b8152f35b346102625760206003193601126102625773ffffffffffffffffffffffffffffffffffffffff6004356107c581610314565b166000526001602052602060ff604060002054166040519015158152f35b346102625760206003193601126102625760043573ffffffffffffffffffffffffffffffffffffffff60005416330361049d576020817f70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b851192600355604051908152a1005b34610262576000806003193601126108c75773ffffffffffffffffffffffffffffffffffffffff815416330361049d57478180808084335af1156108ba576040805133815260208101929092527feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d91a180f35b63b12d13eb82526004601cfd5b80fd5b346102625760206003193601126102625760206109006004356108ec81610314565b63cbc9d1c4600c526000526020600c205490565b6040519015158152f35b3590811515820361026257565b346102625760406003193601126102625760043561093481610314565b602435801515810361026257602082905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44577fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4991610a3f918460205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000526b3fffffffffffffffffffffff82605f1b91161760016034600c20015560405191829173ffffffffffffffffffffffffffffffffffffffff3396168390929160209073ffffffffffffffffffffffffffffffffffffffff60408401951683521515910152565b0390a2005b60046040517f87138d5c000000000000000000000000000000000000000000000000000000008152fd5b34610262576020600319360112610262576020610a9e6004356374dfee70600c52600c1c60005260206000205490565b604051908152f35b3461026257604060031936011261026257610019600435610ac681610314565b60243590612221565b600319604091011261026257600435610ae781610314565b90602435610af481610314565b90565b34610262576020610900610b0a36610acf565b9061253c565b3461026257602060031936011261026257602060405173ffffffffffffffffffffffffffffffffffffffff600435600c1c168152f35b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b34610262576000600319360112610262576020600554604051908152f35b60005b838110610bab5750506000910152565b8181015183820152602001610b9b565b3461026257610bd2610bcc36610acf565b90612579565b604051906020820190815260208252604082019180831067ffffffffffffffff8411176102d7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60409385855260208652610c3d845180928160608801526080870190610b98565b01168101030190f35b34610262576000600319360112610262576020600354604051908152f35b81601f820112156102625780359067ffffffffffffffff82116102d75760405192610cb760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610296565b8284526020838301011161026257816000926020809301838601378301015290565b346102625760a060031936011261026257600435610cf681610314565b602435906bffffffffffffffffffffffff821682036102625760443567ffffffffffffffff811161026257610d2f903690600401610c64565b6064359081151582036102625761001993608435936116cf565b34610262576020610a9e610bcc36610acf565b9181601f840112156102625782359167ffffffffffffffff8311610262576020808501948460051b01011161026257565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610dc1610019913690600401610d5c565b90612023565b3461026257600060031936011261026257602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346102625760a06003193601126102625760043560843560ff8116810361026257610e246118c5565b610e38826000526006602052604060002090565b6004810180549169ffffffffffffffffffff83169283156110f15760028201805443116110c75784600584610f5d7f364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8996000610fac96610f56610fdf9b610f2e89610ef2610f1e610fc69f6003015460405192839160208301956024359187917fffffffffffffffffffff0000000000000000000000000000000000000000000090604a9492845260b01b166020830152602a8201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610296565b5190209560643560443588611ea8565b7fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008154169055565b5560019055565b610f65611e33565b905015610ffa575b019273ffffffffffffffffffffffffffffffffffffffff610fa2855473ffffffffffffffffffffffffffffffffffffffff1690565b9160501c16611f96565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60408051948552602085019290925292a26100196001600455565b81810161101e610fc6825473ffffffffffffffffffffffffffffffffffffffff1690565b33146110a45761109d61109561108561107f697fffffffffffffffffff8a60011c169461105833600c1b6000526007602052604060002090565b6110638782546116c2565b90555473ffffffffffffffffffffffffffffffffffffffff1690565b600c1b90565b6000526007602052604060002090565b9182546116c2565b9055610f6d565b506110bc33600c1b6000526007602052604060002090565b61109d8482546116c2565b60046040517ff6fafba0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f63b4904e000000000000000000000000000000000000000000000000000000008152fd5b906020610af492818152019061060c565b346102625760406003193601126102625760043567ffffffffffffffff81116102625761115d903690600401610332565b6024359061116a82610314565b600091815191611179836125cb565b935b8381106111905760405180610756878261111b565b806111bd8473ffffffffffffffffffffffffffffffffffffffff6111b66001958761261a565b5116612502565b6111c7828861261a565b520161117b565b9060406003198301126102625767ffffffffffffffff9160043583811161026257816111fc91600401610332565b92602435908111610262578160238201121561026257806004013591611221836102fc565b9261122f6040519485610296565b80845260209260248486019260051b82010192831161026257602401905b82821061125b575050505090565b8380916112678461090a565b81520191019061124d565b3461026257611280366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d57825190811561131f57805182036113125790602084818080970194019260051b0101915b8281036112d0578380f35b8480916001825280518652835180604088205581517fbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df928880a3019101906112c5565b63ff633a3883526004601cfd5bfe5b34610262576020610a9e61133436610acf565b90612502565b3461026257611348366111ce565b60009073ffffffffffffffffffffffffffffffffffffffff825416330361049d5782519081156113df57805182036113125790602084818080970194019260051b0101915b828103611398578380f35b84809181600c63cbc9d1c48152825188528551918291205581517f5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a8880a30191019061138d565b63df95788383526004601cfd5b346102625760a06003193601126102625760043561140981610314565b6024359061141682610314565b6044359169ffffffffffffffffffff831683036102625767ffffffffffffffff916064358381116102625761144f903690600401610d5c565b90608435948511610262576107569561146f611477963690600401610d5c565b959094611a2f565b6040519081529081906020820190565b346102625760206003193601126102625760043567ffffffffffffffff811161026257610a9e6114bd6020923690600401610c64565b61164a565b34610262576020600319360112610262576004356114df81610314565b73ffffffffffffffffffffffffffffffffffffffff8060005416330361049d57816020917fe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f9360025560405191168152a1005b346102625760606003193601126102625760043561154f81610314565b60243560443567ffffffffffffffff8111610262577f2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e916115a861159a611632933690600401610d5c565b906115a36118c5565b612023565b6115b2843361253c565b61163c575b6115f633600c1b85836b3fffffffffffffffffffffff6115f083859060205263739094b1600c52600c1c60005260016034600c20015490565b166124c3565b611601813386611f96565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855260208501919091523393918291820190565b0390a26001600455005b61164584611959565b6115b7565b604051611674602082816116678183019687815193849201610b98565b8101038084520182610296565b5160201061131f575190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116bd57565b611680565b919082018092116116bd57565b939273ffffffffffffffffffffffffffffffffffffffff85169333600c1b9484511561189b576117146117108263cbc9d1c4600c526000526020600c205490565b1590565b611871576b3fffffffffffffffffffffff61174882889060205263739094b1600c52600c1c60005260016034600c20015490565b16916117636bffffffffffffffffffffffff861680946116c2565b936a52b7d2dcc80cd2e40000008511611847577f63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf97836117eb966117bc6118329a6117e2966117b06118c5565b80611837575b5061164a565b93605f1b17919060205263739094b1600c52600c1c6000526034600c2090600182015555565b30903390611900565b6117f56001600455565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526bffffffffffffffffffffffff90911660208501523393918291820190565b0390a2565b6118419033612221565b386117b6565b60046040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1578328e000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6a3bc53e000000000000000000000000000000000000000000000000000000008152fd5b6002600454146118d6576002600455565b60046040517fab143c06000000000000000000000000000000000000000000000000000000008152fd5b601c600060649281946020966040519860605260405260601b602c526f23b872dd000000000000000000000000600c525af13d1560016000511417161561194b576000606052604052565b637939f4246000526004601cfd5b602081905263739094b1600c9081527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff331660005260349020600101548015610a44576b3fffffffffffffffffffffff908260205263739094b1600c527e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33166000521660016034600c20015573ffffffffffffffffffffffffffffffffffffffff60405191168152600060208201527fca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d4960403392a2565b9295611a559073ffffffffffffffffffffffffffffffffffffffff9395966115a36118c5565b1691611a64611710848461253c565b611ce557611a728383612502565b9469ffffffffffffffffffff80831691828810611cbb5784600c1b96611a996005546116af565b946002611ab0876000526006602052604060002090565b0154431115611c9157611ac1611e33565b611ada8a611ad4600398949854436116c2565b9a612579565b611ae26102dc565b998c8b528960208c015260408b015260608a0152611b1060808a0193849069ffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8a1660a08a015273ffffffffffffffffffffffffffffffffffffffff861660c08a01528315611b8e5750505091611b7c91611b819993611b768a6374dfee70600c52600c1c60005260206000205490565b91611d2c565b6122bf565b90611b8c6001600455565b565b9250819450809350611bb468056bc75e2d63100000925169ffffffffffffffffffff1690565b1611611bcb57505050611bc6956122bf565b611b81565b15611bdb575050611bc6956122bf565b611c0c611c07611bf833600c1b6000526007602052604060002090565b54670de0b6b3a7640000900490565b611dba565b81611c2a611c24855169ffffffffffffffffffff1690565b92611d0f565b911611918215611c6e575b5050611c4457611bc6956122bf565b60046040517f1c18f846000000000000000000000000000000000000000000000000000000008152fd5b5169d3c21bcecceda1000000925069ffffffffffffffffffff1616113880611c35565b60046040517fd0404f85000000000000000000000000000000000000000000000000000000008152fd5b60046040517f22bbb43c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fb2e532de000000000000000000000000000000000000000000000000000000008152fd5b90670de0b6b3a7640000918281029281840414901517156116bd57565b73ffffffffffffffffffffffffffffffffffffffff8293941692611d7e575b505003611d5457565b60046040517f3b8474be000000000000000000000000000000000000000000000000000000008152fd5b60059291831b8101915b8135808211851b918252602080921852604060002091019282841015611daf579290611d88565b509150503880611d4b565b6040519060208201907f4d2b1791000000000000000000000000000000000000000000000000000000008252602483015260248252606082019082821067ffffffffffffffff8311176102d7576020926000926040525190600254617530fa906000519115611e2557565b63e10bf1cc6000526004601cfd5b611e3b611e61565b90600073ffffffffffffffffffffffffffffffffffffffff83163314610af45750600190565b33600052600160205260ff60406000205416600014611ea4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b3390565b918254611f6c5760806020927f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1948452600094859384927b19457468657265756d205369676e6564204d6573736167653a0a3332845260ff603c600420996040519a865216875260405280606052105afa508051903d15611f5f576060526040829052600c1b5415611f375750565b807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b638baa579f90526004601cfd5b60046040517ff490a6ea000000000000000000000000000000000000000000000000000000008152fd5b60109260209260145260345260446000938480936fa9059cbb00000000000000000000000082525af13d156001835114171615611fd257603452565b6390b8ec1890526004601cfd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561201e5760051b0190565b611fdf565b6000905b82821061204457501061203657565b63dfb035c96000526004601cfd5b9061206461205382858561200e565b356000526006602052604060002090565b61206d81612270565b80549060048082019081549073ffffffffffffffffffffffffffffffffffffffff94858360501c16916a52b7d2dcc80cd2e40000006120ea69ffffffffffffffffffff6b3fffffffffffffffffffffff6120e087879060205263739094b1600c52600c1c60005260016034600c20015490565b16961680966116c2565b116121f95750936121477f830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da594610f2e6121bd9560059560019b9a999060205263739094b1600c52600c1c60005260016034600c2001908154019055565b0161216961107f825473ffffffffffffffffffffffffffffffffffffffff1690565b612187612180826000526007602052604060002090565b5460011c90565b68056bc75e2d6310000081116121de57506121af610fac916000526007602052604060002090565b68056bc75e2d631000009055565b916121c984888861200e565b60405190358152921691602090a20190612027565b906121f3906000526007602052604060002090565b55610fac565b6040517ff3fb0eb9000000000000000000000000000000000000000000000000000000008152fd5b338103612262576374dfee70600c5280600052816020600020557f0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632600080a3565b6385d1f7266000526004601cfd5b60028101544310611c91576004015469ffffffffffffffffffff16156110f157565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116bd5760010190565b9261244c61240597967f8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65949673ffffffffffffffffffffffffffffffffffffffff94612358978960005260066020526124476040600020875181556020880151600182015560408801516002820155606088015160038201556123e36004820161238f60808b019d8e5169ffffffffffffffffffff1690565b829069ffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000825416179055565b60a08a015181547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509190911b7dffffffffffffffffffffffffffffffffffffffff0000000000000000000016179055565b600560c089019e8f5173ffffffffffffffffffffffffffffffffffffffff1690565b91019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6124c3565b61245f61245a600554612292565b600555565b6124be61249761248487995173ffffffffffffffffffffffffffffffffffffffff1690565b9251955169ffffffffffffffffffff1690565b60405193849316958390929169ffffffffffffffffffff6020916040840195845216910152565b0390a3565b9291909280848103119015176124f45760205263739094b1600c52600c1c60005260016034600c2001908154039055565b63ce3a3d376000526004601cfd5b600092913d15612510575050565b9091925060205263739094b1600c5260005260016034600c2001546b3fffffffffffffffffffffff1690565b600092913d1561254a575050565b9091925060205263739094b1600c5260005260016034600c200154605f1c6b3fffffffffffffffffffffff1690565b600092913d15612587575050565b9091925060205263739094b1600c526000526034600c205490565b6040516020810181811067ffffffffffffffff8211176102d75760405260008152906000368137565b906125d5826102fc565b6125e26040519182610296565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061261082946102fc565b0190602036910137565b805182101561201e5760209160051b010190565b9081511561277f5760008092805190612646826125cb565b92612650836125cb565b955b83811061266157505050509190565b806126826126716001938661261a565b516000526006602052604060002090565b546126b257612691818561261a565b5161269c828861261a565b52826126a8828a61261a565b5201925b92612652565b69ffffffffffffffffffff6126e060046126cf612671858961261a565b015469ffffffffffffffffffff1690565b16612715576126ef818561261a565b516126fa828861261a565b5261270e612708828a61261a565b60039052565b01926126ac565b6002612724612671838761261a565b015443111561275657612737818561261a565b51612742828861261a565b5261270e612750828a61261a565b60029052565b612760818561261a565b5161276b828861261a565b5261270e612779828a61261a565b60019052565b90506127896125a2565b90610af46125a256fea2646970667358221220056553307dee1aafd24d123d47fdccee5a2997cae6422e600d53cea9c80a955b64736f6c63430008130033"; type P2PIXConstructorParams = | [signer?: Signer]