From 1d79b8ba287ce22922bc988ec878004c12a2ec47 Mon Sep 17 00:00:00 2001 From: zeroknots Date: Fri, 12 Jul 2024 15:45:31 +0000 Subject: [PATCH] [AUTO-COMMIT] contract artifacts Files changed: A artifacts/BatchedExecUtil.json A artifacts/ModuleInstallUtil.json A artifacts/Safe7579.json A artifacts/Safe7579DCUtil.json A artifacts/Safe7579Launchpad.json A artifacts/interfaces/IERC7579Account.json A artifacts/interfaces/IERC7579AccountEvents.json A artifacts/interfaces/IERC7579AccountView.json A artifacts/interfaces/IExecutor.json A artifacts/interfaces/IFallback.json A artifacts/interfaces/IHook.json A artifacts/interfaces/IMSA.json A artifacts/interfaces/IModule.json A artifacts/interfaces/ISafe.json A artifacts/interfaces/ISafe7579.json A artifacts/interfaces/ISafeOp.json A artifacts/interfaces/IValidator.json --- artifacts/BatchedExecUtil.json | 287 +++ artifacts/ModuleInstallUtil.json | 235 +++ artifacts/Safe7579.json | 1810 +++++++++++++++++ artifacts/Safe7579DCUtil.json | 443 ++++ artifacts/Safe7579Launchpad.json | 1445 +++++++++++++ artifacts/interfaces/IERC7579Account.json | 528 +++++ .../interfaces/IERC7579AccountEvents.json | 144 ++ artifacts/interfaces/IERC7579AccountView.json | 172 ++ artifacts/interfaces/IExecutor.json | 171 ++ artifacts/interfaces/IFallback.json | 171 ++ artifacts/interfaces/IHook.json | 224 ++ artifacts/interfaces/IMSA.json | 848 ++++++++ artifacts/interfaces/IModule.json | 171 ++ artifacts/interfaces/ISafe.json | 462 +++++ artifacts/interfaces/ISafe7579.json | 1397 +++++++++++++ artifacts/interfaces/ISafeOp.json | 209 ++ artifacts/interfaces/IValidator.json | 319 +++ 17 files changed, 9036 insertions(+) create mode 100644 artifacts/BatchedExecUtil.json create mode 100644 artifacts/ModuleInstallUtil.json create mode 100644 artifacts/Safe7579.json create mode 100644 artifacts/Safe7579DCUtil.json create mode 100644 artifacts/Safe7579Launchpad.json create mode 100644 artifacts/interfaces/IERC7579Account.json create mode 100644 artifacts/interfaces/IERC7579AccountEvents.json create mode 100644 artifacts/interfaces/IERC7579AccountView.json create mode 100644 artifacts/interfaces/IExecutor.json create mode 100644 artifacts/interfaces/IFallback.json create mode 100644 artifacts/interfaces/IHook.json create mode 100644 artifacts/interfaces/IMSA.json create mode 100644 artifacts/interfaces/IModule.json create mode 100644 artifacts/interfaces/ISafe.json create mode 100644 artifacts/interfaces/ISafe7579.json create mode 100644 artifacts/interfaces/ISafeOp.json create mode 100644 artifacts/interfaces/IValidator.json diff --git a/artifacts/BatchedExecUtil.json b/artifacts/BatchedExecUtil.json new file mode 100644 index 0000000..3e5b5f0 --- /dev/null +++ b/artifacts/BatchedExecUtil.json @@ -0,0 +1,287 @@ +{ + "abi": [ + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tryExecute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tryExecuteReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "success", "type": "bool[]", "internalType": "bool[]" }, + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + } + ], + "bytecode": { + "object": "0x6080604052348015600f57600080fd5b5061065c8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633f707e6b1461005157806350c890221461006657806361085573146100795780639abb6e17146100a2575b600080fd5b61006461005f3660046103e5565b6100c3565b005b6100646100743660046103e5565b61012d565b61008c6100873660046103e5565b610192565b60405161009991906104ef565b60405180910390f35b6100b56100b03660046103e5565b610254565b604051610099929190610509565b8060005b8181101561012757368484838181106100e2576100e2610563565b90506020028101906100f49190610579565b905061011d6101066020830183610599565b602083013561011860408501856105c2565b61037e565b50506001016100c7565b50505050565b8060005b81811015610127573684848381811061014c5761014c610563565b905060200281019061015e9190610579565b90506101876101706020830183610599565b602083013561018260408501856105c2565b6103b4565b505050600101610131565b6060818067ffffffffffffffff8111156101ae576101ae610610565b6040519080825280602002602001820160405280156101e157816020015b60608152602001906001900390816101cc5790505b50915060005b8181101561024c573685858381811061020257610202610563565b90506020028101906102149190610579565b90506102266101066020830183610599565b84838151811061023857610238610563565b6020908102919091010152506001016101e7565b505092915050565b606080828067ffffffffffffffff81111561027157610271610610565b6040519080825280602002602001820160405280156102a457816020015b606081526020019060019003908161028f5790505b5091508067ffffffffffffffff8111156102c0576102c0610610565b6040519080825280602002602001820160405280156102e9578160200160208202803683370190505b50925060005b81811015610375573686868381811061030a5761030a610563565b905060200281019061031c9190610579565b905061032e6101706020830183610599565b86848151811061034057610340610563565b6020026020010186858151811061035957610359610563565b60209081029190910101919091529015159052506001016102ef565b50509250929050565b60405181838237600038838387895af161039b573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156103f857600080fd5b823567ffffffffffffffff81111561040f57600080fd5b8301601f8101851361042057600080fd5b803567ffffffffffffffff81111561043757600080fd5b8560208260051b840101111561044c57600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156104e357848303601f190188528151805180855260005b818110156104b157602081840181015187830182015201610495565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061047a565b50909695505050505050565b602081526000610502602083018461045c565b9392505050565b6040808252835190820181905260009060208501906060840190835b818110156105455783511515835260209384019390920191600101610525565b50508381036020850152610559818661045c565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261058f57600080fd5b9190910192915050565b6000602082840312156105ab57600080fd5b81356001600160a01b038116811461050257600080fd5b6000808335601e198436030181126105d957600080fd5b83018035915067ffffffffffffffff8211156105f457600080fd5b60200191503681900382131561060957600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fdfea26469706673582212208f0372ef78adc893daf8a86e7b521b3e1a883b75dc6574ec169092079a52aed664736f6c634300081a0033", + "sourceMap": "863:3150:132:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80633f707e6b1461005157806350c890221461006657806361085573146100795780639abb6e17146100a2575b600080fd5b61006461005f3660046103e5565b6100c3565b005b6100646100743660046103e5565b61012d565b61008c6100873660046103e5565b610192565b60405161009991906104ef565b60405180910390f35b6100b56100b03660046103e5565b610254565b604051610099929190610509565b8060005b8181101561012757368484838181106100e2576100e2610563565b90506020028101906100f49190610579565b905061011d6101066020830183610599565b602083013561011860408501856105c2565b61037e565b50506001016100c7565b50505050565b8060005b81811015610127573684848381811061014c5761014c610563565b905060200281019061015e9190610579565b90506101876101706020830183610599565b602083013561018260408501856105c2565b6103b4565b505050600101610131565b6060818067ffffffffffffffff8111156101ae576101ae610610565b6040519080825280602002602001820160405280156101e157816020015b60608152602001906001900390816101cc5790505b50915060005b8181101561024c573685858381811061020257610202610563565b90506020028101906102149190610579565b90506102266101066020830183610599565b84838151811061023857610238610563565b6020908102919091010152506001016101e7565b505092915050565b606080828067ffffffffffffffff81111561027157610271610610565b6040519080825280602002602001820160405280156102a457816020015b606081526020019060019003908161028f5790505b5091508067ffffffffffffffff8111156102c0576102c0610610565b6040519080825280602002602001820160405280156102e9578160200160208202803683370190505b50925060005b81811015610375573686868381811061030a5761030a610563565b905060200281019061031c9190610579565b905061032e6101706020830183610599565b86848151811061034057610340610563565b6020026020010186858151811061035957610359610563565b60209081029190910101919091529015159052506001016102ef565b50509250929050565b60405181838237600038838387895af161039b573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156103f857600080fd5b823567ffffffffffffffff81111561040f57600080fd5b8301601f8101851361042057600080fd5b803567ffffffffffffffff81111561043757600080fd5b8560208260051b840101111561044c57600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156104e357848303601f190188528151805180855260005b818110156104b157602081840181015187830182015201610495565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061047a565b50909695505050505050565b602081526000610502602083018461045c565b9392505050565b6040808252835190820181905260009060208501906060840190835b818110156105455783511515835260209384019390920191600101610525565b50508381036020850152610559818661045c565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261058f57600080fd5b9190910192915050565b6000602082840312156105ab57600080fd5b81356001600160a01b038116811461050257600080fd5b6000808335601e198436030181126105d957600080fd5b83018035915067ffffffffffffffff8211156105f457600080fd5b60200191503681900382131561060957600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fdfea26469706673582212208f0372ef78adc893daf8a86e7b521b3e1a883b75dc6574ec169092079a52aed664736f6c634300081a0033", + "sourceMap": "863:3150:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:283;;;;;;:::i;:::-;;:::i;:::-;;894:289;;;;;;:::i;:::-;;:::i;1478:391::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1875:472;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1189:283::-;1275:10;1258:14;1303:163;1323:6;1319:1;:10;1303:163;;;1350:24;1377:10;;1388:1;1377:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1350:40;-1:-1:-1;1404:51:132;1413:12;;;;1350:40;1413:12;:::i;:::-;1427:11;;;;1440:14;;;;1427:5;1440:14;:::i;:::-;1404:8;:51::i;:::-;-1:-1:-1;;1331:3:132;;1303:163;;;;1248:224;1189:283;;:::o;894:289::-;983:10;966:14;1011:166;1031:6;1027:1;:10;1011:166;;;1058:24;1085:10;;1096:1;1085:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1058:40;-1:-1:-1;1112:54:132;1124:12;;;;1058:40;1124:12;:::i;:::-;1138:11;;;;1151:14;;;;1138:5;1151:14;:::i;:::-;1112:11;:54::i;:::-;-1:-1:-1;;;1039:3:132;;1011:166;;1478:391;1568:21;1622:10;;1658:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:28;;1693:9;1688:175;1708:6;1704:1;:10;1688:175;;;1735:24;1762:10;;1773:1;1762:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1735:40;-1:-1:-1;1801:51:132;1810:12;;;;1735:40;1810:12;:::i;1801:51::-;1789:6;1796:1;1789:9;;;;;;;;:::i;:::-;;;;;;;;;;:63;-1:-1:-1;1716:3:132;;1688:175;;;;1595:274;1478:391;;;;:::o;1875:472::-;1968:21;;2045:10;;2081:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2072:28;;2131:6;2120:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2120:18:132;;2110:28;;2154:9;2149:192;2169:6;2165:1;:10;2149:192;;;2196:24;2223:10;;2234:1;2223:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2196:40;-1:-1:-1;2276:54:132;2288:12;;;;2196:40;2288:12;:::i;2276:54::-;2251:7;2259:1;2251:10;;;;;;;;:::i;:::-;;;;;;2263:6;2270:1;2263:9;;;;;;;;:::i;:::-;;;;;;;;;;2250:80;;;;;;;;;-1:-1:-1;2177:3:132;;2149:192;;;;2018:329;1875:472;;;;;:::o;2353:912::-;2637:4;2631:11;2693:15;2676;2631:11;2655:54;2796:4;2784:10;2767:15;2759:6;2752:5;2744:6;2737:5;2732:69;2722:269;;2911:16;2905:4;2897:6;2882:46;2960:16;2952:6;2945:32;2722:269;3019:16;3011:6;3004:32;3091:4;3083:6;3079:17;3133:16;3127:4;3124:1;3109:41;3207:16;3200:24;3194:4;3187:38;2353:912;;-1:-1:-1;;;;2353:912:132:o;3271:740::-;3572:4;3566:11;3428:12;;3628:15;3611;3566:11;3590:54;3732:4;3720:10;3703:15;3695:6;3688:5;3680:6;3673:5;3668:69;3657:80;;3765:16;3757:6;3750:32;3837:4;3829:6;3825:17;3879:16;3873:4;3870:1;3855:41;3953:16;3950:1;3946:24;3940:4;3933:38;;3271:740;;;;;;;:::o;14:640:153:-;130:6;138;191:2;179:9;170:7;166:23;162:32;159:52;;;207:1;204;197:12;159:52;247:9;234:23;280:18;272:6;269:30;266:50;;;312:1;309;302:12;266:50;335:22;;388:4;380:13;;376:27;-1:-1:-1;366:55:153;;417:1;414;407:12;366:55;457:2;444:16;483:18;475:6;472:30;469:50;;;515:1;512;505:12;469:50;568:7;563:2;553:6;550:1;546:14;542:2;538:23;534:32;531:45;528:65;;;589:1;586;579:12;528:65;620:2;612:11;;;;;642:6;;-1:-1:-1;14:640:153;-1:-1:-1;;;14:640:153:o;659:955::-;710:3;741;773:5;767:12;800:6;795:3;788:19;832:4;827:3;823:14;816:21;;890:4;880:6;877:1;873:14;866:5;862:26;858:37;929:4;922:5;918:16;952:1;962:626;976:6;973:1;970:13;962:626;;;1041:16;;;-1:-1:-1;;1037:30:153;1025:43;;1091:13;;1133:9;;1155:22;;;1201:1;1215:161;1231:8;1226:3;1223:17;1215:161;;;1355:4;1341:12;;;1337:23;;1331:30;1308:14;;;1304:25;;1297:65;1250:14;1215:161;;;1219:3;1428:1;1421:4;1410:8;1404:4;1400:19;1396:30;1389:41;1499:4;1492:2;1488:7;1483:2;1473:8;1469:17;1465:31;1459:4;1455:42;1451:53;1443:61;;;;1539:4;1531:6;1527:17;1517:27;;1573:4;1568:3;1564:14;1557:21;;998:1;995;991:9;986:14;;962:626;;;-1:-1:-1;1604:4:153;;659:955;-1:-1:-1;;;;;;659:955:153:o;1619:277::-;1816:2;1805:9;1798:21;1779:4;1836:54;1886:2;1875:9;1871:18;1863:6;1836:54;:::i;:::-;1828:62;1619:277;-1:-1:-1;;;1619:277:153:o;1901:817::-;2181:2;2193:21;;;2263:13;;2166:18;;;2285:22;;;2133:4;;2376;2364:17;;;2338:2;2323:18;;;2133:4;2409:189;2423:6;2420:1;2417:13;2409:189;;;2498:13;;2491:21;2484:29;2472:42;;2543:4;2571:17;;;;2534:14;;;;2445:1;2438:9;2409:189;;;2413:3;;2645:9;2640:3;2636:19;2629:4;2618:9;2614:20;2607:49;2673:39;2708:3;2700:6;2673:39;:::i;:::-;2665:47;1901:817;-1:-1:-1;;;;;;1901:817:153:o;2723:127::-;2784:10;2779:3;2775:20;2772:1;2765:31;2815:4;2812:1;2805:15;2839:4;2836:1;2829:15;2855:327;2951:4;3009:11;2996:25;3103:2;3099:7;3088:8;3072:14;3068:29;3064:43;3044:18;3040:68;3030:96;;3122:1;3119;3112:12;3030:96;3143:33;;;;;2855:327;-1:-1:-1;;2855:327:153:o;3187:286::-;3246:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:52;;;3315:1;3312;3305:12;3267:52;3341:23;;-1:-1:-1;;;;;3393:31:153;;3383:42;;3373:70;;3439:1;3436;3429:12;3478:521;3555:4;3561:6;3621:11;3608:25;3715:2;3711:7;3700:8;3684:14;3680:29;3676:43;3656:18;3652:68;3642:96;;3734:1;3731;3724:12;3642:96;3761:33;;3813:20;;;-1:-1:-1;3856:18:153;3845:30;;3842:50;;;3888:1;3885;3878:12;3842:50;3921:4;3909:17;;-1:-1:-1;3952:14:153;3948:27;;;3938:38;;3935:58;;;3989:1;3986;3979:12;3935:58;3478:521;;;;;:::o;4004:127::-;4065:10;4060:3;4056:20;4053:1;4046:31;4096:4;4093:1;4086:15;4120:4;4117:1;4110:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "execute((address,uint256,bytes)[])": "3f707e6b", + "executeReturn((address,uint256,bytes)[])": "61085573", + "tryExecute((address,uint256,bytes)[])": "50c89022", + "tryExecuteReturn((address,uint256,bytes)[])": "9abb6e17" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"executeReturn\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecuteReturn\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"},{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/DCUtil.sol\":\"BatchedExecUtil\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeReturn", + "outputs": [ + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecuteReturn", + "outputs": [ + { "internalType": "bool[]", "name": "success", "type": "bool[]" }, + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/utils/DCUtil.sol": "BatchedExecUtil" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 132 +} diff --git a/artifacts/ModuleInstallUtil.json b/artifacts/ModuleInstallUtil.json new file mode 100644 index 0000000..ce5f815 --- /dev/null +++ b/artifacts/ModuleInstallUtil.json @@ -0,0 +1,235 @@ +{ + "abi": [ + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unInstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x6080604052348015600f57600080fd5b506102a88061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063782725251461003b5780639517e29f14610050575b600080fd5b61004e6100493660046101ab565b610063565b005b61004e61005e3660046101ab565b61010c565b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e3906100919085908590600401610243565b600060405180830381600087803b1580156100ab57600080fd5b505af11580156100bf573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe709061013a9085908590600401610243565b600060405180830381600087803b15801561015457600080fd5b505af1158015610168573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393500190506100fe565b600080600080606085870312156101c157600080fd5b8435935060208501356001600160a01b03811681146101df57600080fd5b9250604085013567ffffffffffffffff8111156101fb57600080fd5b8501601f8101871361020c57600080fd5b803567ffffffffffffffff81111561022357600080fd5b87602082840101111561023557600080fd5b949793965060200194505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122072b28265091e5c9e174375104ba21d188073e5871eac41392a625877f9042d0f64736f6c634300081a0033", + "sourceMap": "275:586:132:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063782725251461003b5780639517e29f14610050575b600080fd5b61004e6100493660046101ab565b610063565b005b61004e61005e3660046101ab565b61010c565b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e3906100919085908590600401610243565b600060405180830381600087803b1580156100ab57600080fd5b505af11580156100bf573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe709061013a9085908590600401610243565b600060405180830381600087803b15801561015457600080fd5b505af1158015610168573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef12393500190506100fe565b600080600080606085870312156101c157600080fd5b8435935060208501356001600160a01b03811681146101df57600080fd5b9250604085013567ffffffffffffffff8111156101fb57600080fd5b8501601f8101871361020c57600080fd5b803567ffffffffffffffff81111561022357600080fd5b87602082840101111561023557600080fd5b949793965060200194505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122072b28265091e5c9e174375104ba21d188073e5871eac41392a625877f9042d0f64736f6c634300081a0033", + "sourceMap": "275:586:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:263;;;;;;:::i;:::-;;:::i;:::-;;333:257;;;;;;:::i;:::-;;:::i;596:263::-;745:44;;-1:-1:-1;;;745:44:132;;-1:-1:-1;;;;;745:34:132;;;;;:44;;780:8;;;;745:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;804:48:132;;;1414:25:153;;;-1:-1:-1;;;;;1475:32:153;;1470:2;1455:18;;1448:60;804:48:132;;-1:-1:-1;1387:18:153;;-1:-1:-1;804:48:132;;;;;;;;596:263;;;;:::o;333:257::-;480:42;;-1:-1:-1;;;480:42:132;;-1:-1:-1;;;;;480:32:132;;;;;:42;;513:8;;;;480:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;537:46:132;;;1414:25:153;;;-1:-1:-1;;;;;1475:32:153;;1470:2;1455:18;;1448:60;537:46:132;;-1:-1:-1;1387:18:153;;-1:-1:-1;537:46:132;1240:274:153;14:828;102:6;110;118;126;179:2;167:9;158:7;154:23;150:32;147:52;;;195:1;192;185:12;147:52;218:23;;;-1:-1:-1;291:2:153;276:18;;263:32;-1:-1:-1;;;;;324:31:153;;314:42;;304:70;;370:1;367;360:12;304:70;393:5;-1:-1:-1;449:2:153;434:18;;421:32;476:18;465:30;;462:50;;;508:1;505;498:12;462:50;531:22;;584:4;576:13;;572:27;-1:-1:-1;562:55:153;;613:1;610;603:12;562:55;653:2;640:16;679:18;671:6;668:30;665:50;;;711:1;708;701:12;665:50;756:7;751:2;742:6;738:2;734:15;730:24;727:37;724:57;;;777:1;774;767:12;724:57;14:828;;;;-1:-1:-1;808:2:153;800:11;;-1:-1:-1;;;14:828:153:o;847:388::-;1004:2;993:9;986:21;1043:6;1038:2;1027:9;1023:18;1016:34;1100:6;1092;1087:2;1076:9;1072:18;1059:48;1156:1;1127:22;;;1151:2;1123:31;;;1116:42;;;;1219:2;1198:15;;;-1:-1:-1;;1194:29:153;1179:45;1175:54;;847:388;-1:-1:-1;847:388:153:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "installModule(uint256,address,bytes)": "9517e29f", + "unInstallModule(uint256,address,bytes)": "78272525" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"unInstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/DCUtil.sol\":\"ModuleInstallUtil\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "unInstallModule" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/utils/DCUtil.sol": "ModuleInstallUtil" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 132 +} diff --git a/artifacts/Safe7579.json b/artifacts/Safe7579.json new file mode 100644 index 0000000..ed18c1b --- /dev/null +++ b/artifacts/Safe7579.json @@ -0,0 +1,1810 @@ +{ + "abi": [ + { "type": "fallback", "stateMutability": "payable" }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "entryPoint", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnDatas", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [ + { "name": "selector", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getExecutorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNonce", + "inputs": [ + { "name": "safe", "type": "address", "internalType": "address" }, + { "name": "validator", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "nonce", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initializeAccount", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "registryInit", + "type": "tuple", + "internalType": "struct RegistryInit", + "components": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initializeAccountWithValidators", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "magicValue", "type": "bytes4", "internalType": "bytes4" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setRegistry", + "inputs": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [ + { "name": "supported", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "validSignature", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ERC7484RegistryConfigured", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "registry", + "type": "address", + "indexed": true, + "internalType": "contract IERC7484" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Safe7579Initialized", + "inputs": [ + { + "name": "safe", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TryExecutionFailed", + "inputs": [ + { + "name": "safe", + "type": "address", + "indexed": false, + "internalType": "contract ISafe" + }, + { + "name": "numberInBatch", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TryExecutionsFailed", + "inputs": [ + { + "name": "safe", + "type": "address", + "indexed": false, + "internalType": "contract ISafe" + }, + { + "name": "success", + "type": "bool[]", + "indexed": false, + "internalType": "bool[]" + } + ], + "anonymous": false + }, + { "type": "error", "name": "AccountAccessUnauthorized", "inputs": [] }, + { "type": "error", "name": "ExecutionFailed", "inputs": [] }, + { + "type": "error", + "name": "FallbackInstalled", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "HookAlreadyInstalled", + "inputs": [ + { "name": "currentHook", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "InvalidFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { "type": "error", "name": "InvalidHookType", "inputs": [] }, + { + "type": "error", + "name": "InvalidInitData", + "inputs": [ + { "name": "safe", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "InvalidInput", "inputs": [] }, + { + "type": "error", + "name": "InvalidModule", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidModuleType", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "moduleType", "type": "uint256", "internalType": "uint256" } + ] + }, + { "type": "error", "name": "LinkedList_AlreadyInitialized", "inputs": [] }, + { + "type": "error", + "name": "LinkedList_EntryAlreadyInList", + "inputs": [ + { "name": "entry", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "LinkedList_InvalidEntry", + "inputs": [ + { "name": "entry", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "LinkedList_InvalidPage", "inputs": [] }, + { + "type": "error", + "name": "NoFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { + "object": "0x60a0604052348015600f57600080fd5b50604051601a906046565b604051809103906000f0801580156035573d6000803e3d6000fd5b506001600160a01b03166080526053565b6109e180614ee983390190565b608051614e2e6100bb600039600081816112230152818161141b0152818161157c01528181611dc501528181612216015281816122f0015281816123870152818161241e0152818161357a015281816136320152818161395a0152613a7a0152614e2e6000f3fe60806040526004361061012e5760003560e01c8063a71763a8116100ab578063d828435d1161006f578063d828435d146104a2578063e9ae5c53146104c2578063ea5f61d0146104e2578063eab77e1714610502578063f2dc691d14610522578063f698da251461054257610135565b8063a71763a8146103c7578063b0d691fe146103e7578063b875d5d81461040a578063d03c791414610455578063d691c9641461047557610135565b806355d559f4116100f257806355d559f4146102dd5780635faac46b1461030d57806379aad60e1461033b5780639517e29f1461035b5780639cfd7cff1461037b57610135565b80630a664dba146101e0578063112d3a7d146102245780631626ba7e1461025457806319822f7c1461028d578063540fb4f9146102bb57610135565b3661013557005b600036606060003560e01c63bc197c81811463f23a6e6182141763150b7a028214171561016657806020526020603cf35b50336000818152600460209081526040808320546001600160e01b031984351680855260058452828520958552949092528220546001600160a01b0391821692911690806101b48484610557565b915091506101c28888610615565b95506101d084848484610728565b5050505050915050805190602001f35b3480156101ec57600080fd5b50336000908152600460205260409020546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023057600080fd5b5061024461023f366004613d49565b6107ab565b604051901515815260200161021b565b34801561026057600080fd5b5061027461026f366004613da4565b610820565b6040516001600160e01b0319909116815260200161021b565b34801561029957600080fd5b506102ad6102a8366004613e08565b610b96565b60405190815260200161021b565b3480156102c757600080fd5b506102db6102d6366004613eab565b610caa565b005b3480156102e957600080fd5b506102fd6102f8366004613fa7565b610d5a565b60405161021b9493929190614048565b34801561031957600080fd5b5061032d610328366004614094565b610fb7565b60405161021b9291906140c0565b34801561034757600080fd5b506102db610356366004614123565b610fd3565b34801561036757600080fd5b506102db610376366004613d49565b6110c8565b34801561038757600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161021b9190614164565b3480156103d357600080fd5b506102db6103e2366004613d49565b611293565b3480156103f357600080fd5b506f71727de22e5e9d8baf0edac6f37da032610207565b34801561041657600080fd5b5061020761042536600461418d565b6001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b031690565b34801561046157600080fd5b506102446104703660046141aa565b6115ba565b34801561048157600080fd5b50610495610490366004613da4565b611662565b60405161021b91906141c3565b3480156104ae57600080fd5b506102ad6104bd366004614228565b61174b565b3480156104ce57600080fd5b506102db6104dd366004613da4565b6117eb565b3480156104ee57600080fd5b5061032d6104fd366004614094565b611b88565b34801561050e57600080fd5b506102db61051d366004614267565b611b99565b34801561052e57600080fd5b5061024461053d3660046141aa565b611c08565b34801561054e57600080fd5b506102ad611c57565b6060806001600160a01b038416156105d7576105be33856000610578611cb0565b3460003660405160240161058f94939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b031663d68f602560e01b179052611cbc565b9150818060200190518101906105d491906143df565b91505b6001600160a01b0383161561060e576105f533846000610578611cb0565b90508080602001905181019061060b91906143df565b90505b9250929050565b600080356001600160e01b031916815260036020908152604080832033845290915290208054606091906001600160a01b03811690600160a01b900460f81b8161068557604051632464e76d60e11b81526001600160e01b03196000351660048201526024015b60405180910390fd5b61069381607f60f91b611d65565b156106d7576106cd338388886106a7611cb0565b6040516020016106b993929190614413565b604051602081830303815290604052611d77565b9350505050610722565b6106e2816000611d65565b1561071e576106cd3383600089896106f8611cb0565b60405160200161070a93929190614413565b604051602081830303815290604052611cbc565b5050505b92915050565b6001600160a01b0384161561077e5761077e338560008560405160240161074f9190614164565b60408051601f198184030181529190526020810180516001600160e01b0316630b9dfbed60e11b179052611e4c565b6001600160a01b038316156107a5576107a5338460008460405160240161074f9190614164565b50505050565b6000600185036107dd57336001600160a01b038516036107cd57506001610818565b6107d684611eeb565b9050610818565b600285036107ee576107d684611ef9565b60038503610801576107d6848484611f07565b60048503610814576107d6848484611f53565b5060005b949350505050565b6000338282036109ba5760006108f1826001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190614439565b60408051602081018a90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91015b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052611f8e565b8051602090910120604051635ae6bd3760e01b8152600481018290529091506001600160a01b03831690635ae6bd3790602401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190614439565b6000036109a85760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08185c1c1c9bdd9959607a1b604482015260640161067c565b50630b135d3f60e11b9150610b8f9050565b60006109c96014828688614452565b6109d29161447c565b60601c90508015806109ea57506109e881611eeb565b155b15610b14576000610a89836001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190614439565b60408051602081018b90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91016108c0565b805160208201209091506001600160a01b03841663934f3a118284610ab18a6014818e614452565b6040518563ffffffff1660e01b8152600401610ad094939291906144c9565b60006040518083038186803b158015610ae857600080fd5b505afa158015610afc573d6000803e3d6000fd5b50630b135d3f60e11b9750610b8f9650505050505050565b6000610b733383610b23611cb0565b8a610b318a6014818e614452565b604051602401610b4494939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b0316637aa8f17760e11b179052611d77565b905080806020019051810190610b8991906144f5565b93505050505b9392505050565b60006f71727de22e5e9d8baf0edac6f37da032610bb1611cb0565b6001600160a01b031614610bd857604051635629665f60e11b815260040160405180910390fd5b6020840135606081901c90811580610bf65750610bf482611eeb565b155b15610c0b57610c0486612008565b9250610c70565b6000610c56338460008a8a604051602401610c27929190614557565b60408051601f198184030181529190526020810180516001600160e01b0316639700320360e01b179052611cbc565b905080806020019051810190610c6c9190614439565b9350505b8315610ca157610ca1336f71727de22e5e9d8baf0edac6f37da0328660405180602001604052806000815250611e4c565b50509392505050565b6f71727de22e5e9d8baf0edac6f37da032610cc3611cb0565b6001600160a01b03161480610cf05750610cdb611cb0565b6001600160a01b0316336001600160a01b0316145b610d0d57604051635629665f60e11b815260040160405180910390fd5b610d3f610d1d602083018361465b565b610d2a6020840184614678565b610d3a60608601604087016146c1565b6120b7565b610d4f898989898989898961216e565b505050505050505050565b6060600080823682610d706101008901896146dc565b9092509050610d83600660008385614452565b610d8c91614722565b60d01c9450610d9f600c60068385614452565b610da891614722565b60d01c9350610dba81600c8185614452565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610e3691508a018a61465b565b6001600160a01b0316815260200188602001358152602001888060400190610e5e91906146dc565b604051610e6c929190614758565b6040519081900390208152602001610e8760608a018a6146dc565b604051610e95929190614758565b60405180910390208152602001610eab8961248d565b6001600160801b03168152602001610ec28961249d565b6001600160801b031681526020018860a001358152602001610ee3896124b2565b6001600160801b03168152602001610efa896124c1565b6001600160801b03168152602001610f1560e08a018a6146dc565b604051610f23929190614758565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610f6f611c57565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b60606000610fc860013386866124d6565b915091509250929050565b6f71727de22e5e9d8baf0edac6f37da032610fec611cb0565b6001600160a01b031614806110195750611004611cb0565b6001600160a01b0316336001600160a01b0316145b61103657604051635629665f60e11b815260040160405180910390fd5b61104160013361269a565b8060005b81811015611097573684848381811061106057611060614768565b9050602002810190611072919061477e565b905061108e33611085602084018461465b565b60019190612715565b50600101611045565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a2505050565b336000908152600460209081526040808320547fd00bcad91b775f25eb0aee15808d12dfdaa6dc5a7d6b754e26f9c205d2a3b8df909252822054639517e29f60e01b926001600160a01b039283169290911690806111268484610557565b915091506111416f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611152611cb0565b6001600160a01b0316148061117f575061116a611cb0565b6001600160a01b0316336001600160a01b0316145b61119c57604051635629665f60e11b815260040160405180910390fd5b606060018a036111b8576111b189898961280a565b905061121d565b60028a036111cb576111b1898989612866565b60038a036111de576111b1898989612881565b60048a036111f1576111b1898989612a00565b89611201576111b1898989612ba0565b60405163041c38b360e41b8152600481018b905260240161067c565b611286337f00000000000000000000000000000000000000000000000000000000000000008c8c856040516024016112579392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316639517e29f60e01b179052612d51565b50610d4f84848484610728565b336000908152600460209081526040808320547fc45a7acaba78a7b4c4432b604d301355b314c0a7811768a1ee2563c9d34ca4e09092529091205484916314e2ec7560e31b916001600160a01b0391821691908116908416821480159061130c5750806001600160a01b0316846001600160a01b031614155b156114925760008061131e8484610557565b915091506113396f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b031661134a611cb0565b6001600160a01b031614806113775750611362611cb0565b6001600160a01b0316336001600160a01b0316145b61139457604051635629665f60e11b815260040160405180910390fd5b606060018b036113b0576113a98a8a8a612dea565b9050611415565b60028b036113c3576113a98a8a8a612e13565b60038b036113d6576113a98a8a8a612e34565b60048b036113e9576113a98a8a8a612e80565b8a6113f9576113a98a8a8a612f38565b60405163041c38b360e41b8152600481018c905260240161067c565b61147e337f00000000000000000000000000000000000000000000000000000000000000008d8d8560405160240161144f9392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316637827252560e01b17905261308b565b5061148b84848484610728565b50506115b0565b6f71727de22e5e9d8baf0edac6f37da0326114ab611cb0565b6001600160a01b031614806114d857506114c3611cb0565b6001600160a01b0316336001600160a01b0316145b6114f557604051635629665f60e11b815260040160405180910390fd5b6060600189036115115761150a888888612dea565b9050611576565b600289036115245761150a888888612e13565b600389036115375761150a888888612e34565b6004890361154a5761150a888888612e80565b8861155a5761150a888888612f38565b60405163041c38b360e41b8152600481018a905260240161067c565b610d4f337f00000000000000000000000000000000000000000000000000000000000000008b8b8560405160240161144f9392919061479e565b5050505050505050565b600081600881901b6115d082600160f81b611d65565b156115de5760019250611621565b6115e9826000611d65565b156115f75760019250611621565b611609826001600160f81b0319611d65565b156116175760019250611621565b5060009392505050565b8280156116345750611634816000611d65565b15611640575050919050565b828015611656575061165681600160f81b611d65565b15611617575050919050565b606061167461166f611cb0565b611ef9565b6116a557611680611cb0565b604051635c93ff2f60e11b81526001600160a01b03909116600482015260240161067c565b336000908152600460209081526040808320547f4162c930ade27880570b0eb31efbc8a626b97e81a40ced27163509dfe16398829092528220546335a4725960e21b926001600160a01b039283169290911690806117038484610557565b9150915061170f611cb0565b600261171b8282613141565b8a600881901b61172d81838e8e6131cc565b99505050505061173f84848484610728565b50505050509392505050565b6000602082901b640100000000600160c01b03166f71727de22e5e9d8baf0edac6f37da032604051631aab3f0d60e11b81526001600160a01b0386811660048301526001600160c01b038416602483015291909116906335567e1a90604401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190614439565b336000908152600460209081526040808320547fccfe1b2bef70acd8e661aeb5430e147f4c75cb320972acba718a28da428e1a3090925282205463e9ae5c5360e01b926001600160a01b039283169290911690806118498484610557565b915091506118646f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611875611cb0565b6001600160a01b031614806118a2575061188d611cb0565b6001600160a01b0316336001600160a01b0316145b6118bf57604051635629665f60e11b815260040160405180910390fd5b87600881901b336118d1826000611d65565b15611a2a576118e483600160f81b611d65565b156119055789358a016020810190356118fe838383613574565b5050611b79565b611910836000611d65565b15611978576000803660006119258e8e6135db565b935093509350935061196f85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4c92505050565b50505050611b79565b61198a836001600160f81b0319611d65565b15611a0f57600061199e6014828c8e614452565b6119a79161447c565b60601c90503660008c8c60149080926119c293929190614452565b91509150611a07848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5192505050565b505050611b79565b82604051632e5bf3f960e21b815260040161067c91906147d1565b611a3882600160f81b611d65565b15611b5e57611a4b83600160f81b611d65565b15611a655789358a016020810190356118fe83838361362c565b611a70836000611d65565b15611acf57600080366000611a858e8e6135db565b935093509350935061196f85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061369392505050565b611ae1836001600160f81b0319611d65565b15611a0f576000611af56014828c8e614452565b611afe9161447c565b60601c90503660008c8c6014908092611b1993929190614452565b91509150611a07848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061308b92505050565b816040516308c3ee0360e11b815260040161067c91906147d1565b5050506115b084848484610728565b60606000610fc860023386866124d6565b6f71727de22e5e9d8baf0edac6f37da032611bb2611cb0565b6001600160a01b03161480611bdf5750611bca611cb0565b6001600160a01b0316336001600160a01b0316145b611bfc57604051635629665f60e11b815260040160405180910390fd5b6107a5848484846120b7565b600060018203611c1a57506001919050565b60028203611c2a57506001919050565b60038203611c3a57506001919050565b60048203611c4a57506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60131936013560601c90565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401611cf3949392919061481e565b6000604051808303816000875af1158015611d12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d3a9190810190614864565b9250905080611d5c57604051632b3f6d1160e21b815260040160405180910390fd5b50949350505050565b6001600160f81b031990811691161490565b606060008383604051602401611d8e9291906148b1565b60408051601f198184030181529181526020820180516001600160e01b0316636a22165760e01b17905251909150600090611def907f00000000000000000000000000000000000000000000000000000000000000009084906024016148b1565b60408051601f19818403018152919052602080820180516001600160e01b031663b4faba0960e01b17815282519293509091600091895afa5060203d036040519350808401604052806020853e50600051610ca157825160208401fd5b60405163468721a760e01b81526000906001600160a01b0386169063468721a790611e8190879087908790879060040161481e565b6020604051808303816000875af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec491906148d5565b905080611ee457604051632b3f6d1160e21b815260040160405180910390fd5b5050505050565b600061072260013384613749565b600061072260023384613749565b600080611f168385018561418d565b6001600160e01b03191660009081526003602090815260408083203384529091529020546001600160a01b03908116908616149150509392505050565b60008080611f63848601866148ff565b915091506000611f73838361378d565b6001600160a01b039081169088161493505050509392505050565b6060601960f81b600160f81b858585604051602001611fae92919061492b565b60408051808303601f190181529082905280516020918201206001600160f81b0319958616918301919091529290931660218401526022830152604282015260620160405160208183030381529060405290509392505050565b600080808080612028866f71727de22e5e9d8baf0edac6f37da032610d5a565b8351602085012060405163934f3a1160e01b81529498509296509094509250339163934f3a119161205f9188908690600401614951565b60006040518083038186803b15801561207757600080fd5b505afa925050508015612088575060015b61209f5761209860018385613823565b94506120ae565b6120ab60008385613823565b94505b50505050919050565b33600090815260208190526040902080546001600160a01b0319166001600160a01b0386169081179091551561213257612132338560008487876040516024016121039392919061497c565b60408051601f198184030181529190526020810180516001600160e01b031663f05c04e160e01b179052611e4c565b6040516001600160a01b0385169033907f9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e9490600090a350505050565b3360009081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f602052604090205460609088906001600160a01b0316612266576121ba60013361269a565b60005b8181101561226057368b8b838181106121d8576121d8614768565b90506020028101906121ea919061477e565b905061220e6121fc602083018361465b565b61220960208401846146dc565b61280a565b9350612257337f00000000000000000000000000000000000000000000000000000000000000006001612244602086018661465b565b886040516024016112579392919061479e565b506001016121bd565b50612287565b80156122875760405163d8e3ed1b60e01b815233600482015260240161067c565b61229260023361269a565b508560005b8181101561232757368989838181106122b2576122b2614768565b90506020028101906122c4919061477e565b90506122e86122d6602083018361465b565b6122e360208401846146dc565b612866565b935061231e337f00000000000000000000000000000000000000000000000000000000000000006002612244602086018661465b565b50600101612297565b5084905060005b818110156123be573687878381811061234957612349614768565b905060200281019061235b919061477e565b905061237f61236d602083018361465b565b61237a60208401846146dc565b612881565b93506123b5337f00000000000000000000000000000000000000000000000000000000000000006003612244602086018661465b565b5060010161232e565b5082905060005b8181101561245557368585838181106123e0576123e0614768565b90506020028101906123f2919061477e565b9050612416612404602083018361465b565b61241160208401846146dc565b612a00565b935061244c337f00000000000000000000000000000000000000000000000000000000000000006004612244602086018661465b565b506001016123c5565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a250505050505050505050565b6000610722826080013560801c90565b60006001600160801b03608083013516610722565b600060c082013560801c610722565b60006001600160801b0360c083013516610722565b606060006001600160a01b0384166001148015906124fc57506124fa868686613749565b155b1561252557604051637c84ecfb60e01b81526001600160a01b038516600482015260240161067c565b826000036125465760405163f725081760e01b815260040160405180910390fd5b826001600160401b0381111561255e5761255e614328565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b506001600160a01b038086166000908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b038216158015906125d757506001600160a01b038216600114155b80156125e257508381105b1561264757818382815181106125fa576125fa614768565b6001600160a01b039283166020918202929092018101919091529281166000908152888452604080822089841683529094529290922054909116908061263f816149ea565b9150506125b5565b6001600160a01b0382166001148015906126615750600081115b1561268d5782612672600183614a03565b8151811061268257612682614768565b602002602001015191505b8083525094509492505050565b60016000908152602083815260408083206001600160a01b03808616855292529091205416156126dd576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b038116158061273457506001600160a01b0381166001145b1561275d57604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b03818116600090815260208581526040808320868516845290915290205416156127ac57604051631034f46960e21b81526001600160a01b038216600482015260240161067c565b60016000908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b60608360016128198282613141565b61282560013388612715565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b60608360026128758282613141565b61282560023388612715565b60608360036128908282613141565b600080806128a087890189614a67565b919450925090506001600160e01b031983166306d61fe760e41b14806128d657506001600160e01b03198316638a91b0e360e01b145b15612900576040516379bd117b60e01b81526001600160e01b03198416600482015260240161067c565b61290b826000611d65565b8015612920575061292082607f60f91b611d65565b1561294057816040516376087dc160e01b815260040161067c91906147d1565b6001600160e01b0319831660009081526003602090815260408083203384529091529020546001600160a01b031615612998576040516374420d1560e01b81526001600160e01b03198416600482015260240161067c565b6001600160e01b03199092166000908152600360209081526040808320338452909152902080546001600160a01b038a166001600160a01b031960f89490941c600160a01b02939093166001600160a81b031990911617919091179055925050509392505050565b6060836004612a0f8282613141565b60008080612a1f87890189614ad5565b91945092509050600080846001811115612a3b57612a3b6147e6565b148015612a5057506001600160e01b03198316155b15612ac65750336000908152600460205260409020546001600160a01b03168015612a995760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b33600090815260046020526040902080546001600160a01b0319166001600160a01b038c16179055612b93565b6001846001811115612ada57612ada6147e6565b03612b7a57506001600160e01b0319821660009081526005602090815260408083203384529091529020546001600160a01b03168015612b385760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b6001600160e01b031983166000908152600560209081526040808320338452909152902080546001600160a01b0319166001600160a01b038c16179055612b93565b604051635691922f60e01b815260040160405180910390fd5b5098975050505050505050565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612be85760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612c0757612c07614768565b90506020020135905060018103612c4657612c408d888885818110612c2e57612c2e614768565b905060200281019061220991906146dc565b50612d01565b60028103612c7657612c408d888885818110612c6457612c64614768565b90506020028101906122e391906146dc565b60038103612ca657612c408d888885818110612c9457612c94614768565b905060200281019061237a91906146dc565b60048103612cd657612c408d888885818110612cc457612cc4614768565b905060200281019061241191906146dc565b60405163484d218160e01b81526001600160a01b038e1660048201526024810182905260440161067c565b50600101612beb565b5082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b60405163468721a760e01b81526000906001600160a01b0385169063468721a790612d879086908590879060019060040161481e565b6020604051808303816000875af1158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca91906148d5565b9050806107a557604051632b3f6d1160e21b815260040160405180910390fd5b60606000612dfa83850185614b03565b92509050612e0b600133838861385b565b509392505050565b60606000612e2383850185614b03565b92509050612e0b600233838861385b565b60606000612e4483850185614b48565b6001600160e01b03199091166000908152600360209081526040808320338452909152902080546001600160a01b031916905595945050505050565b6060600080612e9184860186614ad5565b945090925090506000826001811115612eac57612eac6147e6565b148015612ec157506001600160e01b03198116155b15612ee85733600090815260046020526040902080546001600160a01b0319169055610ca1565b6001826001811115612efc57612efc6147e6565b03612b7a576001600160e01b031981166000908152600560209081526040808320338452909152902080546001600160a01b0319169055610ca1565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612f805760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612f9f57612f9f614768565b90506020020135905060018103612fe357612fdd8d888885818110612fc657612fc6614768565b9050602002810190612fd891906146dc565b612dea565b50613082565b6002810361301857612fdd8d88888581811061300157613001614768565b905060200281019061301391906146dc565b612e13565b6003810361304d57612fdd8d88888581811061303657613036614768565b905060200281019061304891906146dc565b612e34565b60048103612cd657612fdd8d88888581811061306b5761306b614768565b905060200281019061307d91906146dc565b612e80565b50600101612f83565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906130c19086908590879060019060040161481e565b6020604051808303816000875af11580156130e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310491906148d5565b9050806107a557604080516001600160a01b038616815260006020820152600080516020614dd9833981519152910160405180910390a150505050565b336000908152602081905260409020546001600160a01b031680156131c75760405163529562a160e01b81523360048201526001600160a01b0384811660248301526044820184905282169063529562a19060640160006040518083038186803b1580156131ae57600080fd5b505afa1580156131c2573d6000803e3d6000fd5b505050505b505050565b60606131d9856000611d65565b156133c5576131ec84600160f81b611d65565b1561320f5782358301602081019035613206338383613952565b92505050610818565b61321a846000611d65565b156132ce5760008036600061322f87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161324e5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cbc92505050565b856000815181106132ba576132ba614768565b602002602001018190525050505050610818565b6132e0846001600160f81b0319611d65565b156133aa5760006132f46014828587614452565b6132fd9161447c565b60601c90503660006133128560148189614452565b604080516001808252818301909252929450909250816020015b606081526020019060019003908161332c579050509350613384338484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139ce92505050565b8460008151811061339757613397614768565b6020026020010181905250505050610818565b83604051632e5bf3f960e21b815260040161067c91906147d1565b6133d385600160f81b611d65565b15613559576133e684600160f81b611d65565b1561340b5782358301602081019035613400338383613a6f565b935061081892505050565b613416846000611d65565b156134a35760008036600061342b87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161344a5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6592505050565b6134b5846001600160f81b0319611d65565b156133aa5760006134c96014828587614452565b6134d29161447c565b60601c90503660006134e78560148189614452565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081613501579050509350613384338484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613c2592505050565b846040516308c3ee0360e11b815260040161067c91906147d1565b6131c7837f000000000000000000000000000000000000000000000000000000000000000084846040516024016135ac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316633f707e6b60e01b179052612d51565b60008036816135ed6014828789614452565b6135f69161447c565b60601c9350613609603460148789614452565b61361291614c18565b92506136218560348189614452565b949793965094505050565b6131c7837f00000000000000000000000000000000000000000000000000000000000000008484604051602401613664929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316632864481160e11b17905261308b565b60405163468721a760e01b81526000906001600160a01b0386169063468721a7906136c890879087908790879060040161481e565b6020604051808303816000875af11580156136e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370b91906148d5565b905080611ee457604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a15050505050565b600060016001600160a01b038316148015906108185750506001600160a01b0390811660009081526020938452604080822093831682529290935291205416151590565b6000808360018111156137a2576137a26147e6565b1480156137b757506001600160e01b03198216155b156137d75750336000908152600460205260409020546001600160a01b03165b60018360018111156137eb576137eb6147e6565b0361072257506001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b0316919050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561384b57600061384e565b60015b60ff161717949350505050565b6001600160a01b038116158061387a57506001600160a01b0381166001145b156138a357604051637c84ecfb60e01b81526001600160a01b038316600482015260240161067c565b6001600160a01b0382811660009081526020868152604080832087851684529091529020548116908216146138f657604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b039081166000908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b60606139bb847f0000000000000000000000000000000000000000000000000000000000000000858560405160240161398c929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316636108557360e01b1790526139ce565b8060200190518101906108189190614ce5565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613a06949392919061481e565b6000604051808303816000875af1158015613a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a4d9190810190614864565b9250905080612e0b57604051632b3f6d1160e21b815260040160405180910390fd5b6060806000613adb867f00000000000000000000000000000000000000000000000000000000000000008787604051602401613aac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316639abb6e1760e01b179052613c25565b905080806020019051810190613af19190614d19565b8151919450925060005b81811015613b5a57848181518110613b1557613b15614768565b6020026020010151613b5257604080516001600160a01b038a16815260208101839052600080516020614dd9833981519152910160405180910390a15b600101613afb565b505050935093915050565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401613b9c949392919061481e565b6000604051808303816000875af1158015613bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613be39190810190614864565b9250905080611d5c57604080516001600160a01b038816815260006020820152600080516020614dd9833981519152910160405180910390a150949350505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613c5d949392919061481e565b6000604051808303816000875af1158015613c7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ca49190810190614864565b9250905080612e0b57604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a1509392505050565b6001600160a01b0381168114613cfa57600080fd5b50565b8035611c5281613ce5565b60008083601f840112613d1a57600080fd5b5081356001600160401b03811115613d3157600080fd5b60208301915083602082850101111561060e57600080fd5b60008060008060608587031215613d5f57600080fd5b843593506020850135613d7181613ce5565b925060408501356001600160401b03811115613d8c57600080fd5b613d9887828801613d08565b95989497509550505050565b600080600060408486031215613db957600080fd5b8335925060208401356001600160401b03811115613dd657600080fd5b613de286828701613d08565b9497909650939450505050565b60006101208284031215613e0257600080fd5b50919050565b600080600060608486031215613e1d57600080fd5b83356001600160401b03811115613e3357600080fd5b613e3f86828701613def565b9660208601359650604090950135949350505050565b60008083601f840112613e6757600080fd5b5081356001600160401b03811115613e7e57600080fd5b6020830191508360208260051b850101111561060e57600080fd5b600060608284031215613e0257600080fd5b600080600080600080600080600060a08a8c031215613ec957600080fd5b89356001600160401b03811115613edf57600080fd5b613eeb8c828d01613e55565b909a5098505060208a01356001600160401b03811115613f0a57600080fd5b613f168c828d01613e55565b90985096505060408a01356001600160401b03811115613f3557600080fd5b613f418c828d01613e55565b90965094505060608a01356001600160401b03811115613f6057600080fd5b613f6c8c828d01613e55565b90945092505060808a01356001600160401b03811115613f8b57600080fd5b613f978c828d01613e99565b9150509295985092959850929598565b60008060408385031215613fba57600080fd5b82356001600160401b03811115613fd057600080fd5b613fdc85828601613def565b9250506020830135613fed81613ce5565b809150509250929050565b60005b83811015614013578181015183820152602001613ffb565b50506000910152565b60008151808452614034816020860160208601613ff8565b601f01601f19169290920160200192915050565b60808152600061405b608083018761401c565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152614089818561401c565b979650505050505050565b600080604083850312156140a757600080fd5b82356140b281613ce5565b946020939093013593505050565b6040808252835190820181905260009060208501906060840190835b818110156141035783516001600160a01b03168352602093840193909201916001016140dc565b50506001600160a01b039490941660209390930192909252509092915050565b6000806020838503121561413657600080fd5b82356001600160401b0381111561414c57600080fd5b61415885828601613e55565b90969095509350505050565b602081526000610b8f602083018461401c565b6001600160e01b031981168114613cfa57600080fd5b60006020828403121561419f57600080fd5b8135610b8f81614177565b6000602082840312156141bc57600080fd5b5035919050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561421c57603f1987860301845261420785835161401c565b945060209384019391909101906001016141eb565b50929695505050505050565b6000806040838503121561423b57600080fd5b823561424681613ce5565b91506020830135613fed81613ce5565b803560ff81168114611c5257600080fd5b6000806000806060858703121561427d57600080fd5b843561428881613ce5565b935060208501356001600160401b038111156142a357600080fd5b6142af87828801613e55565b90945092506142c2905060408601614256565b905092959194509250565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038516815283602082015260606040820152600061431e6060830184866142cd565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561436657614366614328565b604052919050565b60006001600160401b0382111561438757614387614328565b50601f01601f191660200190565b600082601f8301126143a657600080fd5b81516143b96143b48261436e565b61433e565b8181528460208386010111156143ce57600080fd5b610818826020830160208701613ff8565b6000602082840312156143f157600080fd5b81516001600160401b0381111561440757600080fd5b61081884828501614395565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60006020828403121561444b57600080fd5b5051919050565b6000808585111561446257600080fd5b8386111561446f57600080fd5b5050820193919092039150565b80356bffffffffffffffffffffffff1981169060148410156144c2576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b8481526060602082015260006144e2606083018661401c565b82810360408401526140898185876142cd565b60006020828403121561450757600080fd5b8151610b8f81614177565b6000808335601e1984360301811261452957600080fd5b83016020810192503590506001600160401b0381111561454857600080fd5b80360382131561060e57600080fd5b604081526145786040820161456b85613cfd565b6001600160a01b03169052565b6020830135606082015260006145916040850185614512565b61012060808501526145a8610160850182846142cd565b9150506145b86060860186614512565b848303603f190160a08601526145cf8382846142cd565b608088013560c08781019190915260a089013560e0808901919091529089013561010088015290935061460792508701905086614512565b848303603f190161012086015261461f8382846142cd565b92505050614631610100860186614512565b848303603f19016101408601526146498382846142cd565b93505050508260208301529392505050565b60006020828403121561466d57600080fd5b8135610b8f81613ce5565b6000808335601e1984360301811261468f57600080fd5b8301803591506001600160401b038211156146a957600080fd5b6020019150600581901b360382131561060e57600080fd5b6000602082840312156146d357600080fd5b610b8f82614256565b6000808335601e198436030181126146f357600080fd5b8301803591506001600160401b0382111561470d57600080fd5b60200191503681900382131561060e57600080fd5b80356001600160d01b031981169060068410156144c2576001600160d01b031960069490940360031b84901b1690921692915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261479457600080fd5b9190910192915050565b8381526001600160a01b03831660208201526060604082018190526000906147c89083018461401c565b95945050505050565b6001600160f81b031991909116815260200190565b634e487b7160e01b600052602160045260246000fd5b6002811061481a57634e487b7160e01b600052602160045260246000fd5b9052565b60018060a01b0385168152836020820152608060408201526000614845608083018561401c565b90506147c860608301846147fc565b80518015158114611c5257600080fd5b6000806040838503121561487757600080fd5b61488083614854565b915060208301516001600160401b0381111561489b57600080fd5b6148a785828601614395565b9150509250929050565b6001600160a01b03831681526040602082018190526000906108189083018461401c565b6000602082840312156148e757600080fd5b610b8f82614854565b803560028110611c5257600080fd5b6000806040838503121561491257600080fd5b61491b836148f0565b91506020830135613fed81614177565b82815260008251614943816020850160208701613ff8565b919091016020019392505050565b83815260606020820152600061496a606083018561401c565b828103604084015261431e818561401c565b60ff84168152604060208201819052810182905260008360608301825b858110156149c95782356149ac81613ce5565b6001600160a01b0316825260209283019290910190600101614999565b509695505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016149fc576149fc6149d4565b5060010190565b81810381811115610722576107226149d4565b600082601f830112614a2757600080fd5b8135614a356143b48261436e565b818152846020838601011115614a4a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614a7c57600080fd5b8335614a8781614177565b925060208401356001600160f81b031981168114614aa457600080fd5b915060408401356001600160401b03811115614abf57600080fd5b614acb86828701614a16565b9150509250925092565b600080600060608486031215614aea57600080fd5b614af3846148f0565b92506020840135614aa481614177565b60008060408385031215614b1657600080fd5b8235614b2181613ce5565b915060208301356001600160401b03811115614b3c57600080fd5b6148a785828601614a16565b60008060408385031215614b5b57600080fd5b8235614b2181614177565b6020808252810182905260006040600584901b830181019083018583605e1936839003015b87821015614c0b57868503603f190184528235818112614baa57600080fd5b89018035614bb781613ce5565b6001600160a01b0316865260208181013590870152614bd96040820182614512565b915060606040880152614bf06060880183836142cd565b96505050602083019250602084019350600182019150614b8b565b5092979650505050505050565b8035602083101561072257600019602084900360031b1b1692915050565b60006001600160401b03821115614c4f57614c4f614328565b5060051b60200190565b600082601f830112614c6a57600080fd5b8151614c786143b482614c36565b8082825260208201915060208360051b860101925085831115614c9a57600080fd5b602085015b83811015614cdb5780516001600160401b03811115614cbd57600080fd5b614ccc886020838a0101614395565b84525060209283019201614c9f565b5095945050505050565b600060208284031215614cf757600080fd5b81516001600160401b03811115614d0d57600080fd5b61081884828501614c59565b60008060408385031215614d2c57600080fd5b82516001600160401b03811115614d4257600080fd5b8301601f81018513614d5357600080fd5b8051614d616143b482614c36565b8082825260208201915060208360051b850101925087831115614d8357600080fd5b6020840193505b82841015614dac57614d9b84614854565b825260209384019390910190614d8a565b8095505050505060208301516001600160401b03811115614dcc57600080fd5b6148a785828601614c5956feb8bc84bd77f5eb08210b8eb20fd63b3ec6a7992d277ab94663bae0e066f792aca2646970667358221220ea7603497be0a0e1ddc106666c75af038c8db18b0f9143f6418b0e8b232c109164736f6c634300081a00336080604052348015600f57600080fd5b506109c28061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100d357806378272525146100e65780639517e29f146100f95780639abb6e171461010c57600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100aa575b600080fd5b6100956100903660046105ba565b61012d565b005b6100956100a53660046105ba565b610197565b6100bd6100b83660046105ba565b6101fc565b6040516100ca91906106c4565b60405180910390f35b6100956100e1366004610710565b6102be565b6100956100f43660046107da565b6102e1565b6100956101073660046107da565b61038a565b61011f61011a3660046105ba565b610429565b6040516100ca929190610864565b8060005b81811015610191573684848381811061014c5761014c6108be565b905060200281019061015e91906108d4565b905061018761017060208301836108f4565b6020830135610182604085018561090f565b610553565b5050600101610131565b50505050565b8060005b8181101561019157368484838181106101b6576101b66108be565b90506020028101906101c891906108d4565b90506101f16101da60208301836108f4565b60208301356101ec604085018561090f565b610589565b50505060010161019b565b6060818067ffffffffffffffff811115610218576102186106fa565b60405190808252806020026020018201604052801561024b57816020015b60608152602001906001900390816102365790505b50915060005b818110156102b6573685858381811061026c5761026c6108be565b905060200281019061027e91906108d4565b905061029061017060208301836108f4565b8483815181106102a2576102a26108be565b602090810291909101015250600101610251565b505092915050565b604051600080835160208501865afa3d6000833e80156102dc573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061030f908590859060040161095d565b600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103b8908590859060040161095d565b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061037c565b606080828067ffffffffffffffff811115610446576104466106fa565b60405190808252806020026020018201604052801561047957816020015b60608152602001906001900390816104645790505b5091508067ffffffffffffffff811115610495576104956106fa565b6040519080825280602002602001820160405280156104be578160200160208202803683370190505b50925060005b8181101561054a57368686838181106104df576104df6108be565b90506020028101906104f191906108d4565b90506105036101da60208301836108f4565b868481518110610515576105156108be565b6020026020010186858151811061052e5761052e6108be565b60209081029190910101919091529015159052506001016104c4565b50509250929050565b60405181838237600038838387895af1610570573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105cd57600080fd5b823567ffffffffffffffff8111156105e457600080fd5b8301601f810185136105f557600080fd5b803567ffffffffffffffff81111561060c57600080fd5b8560208260051b840101111561062157600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156106b857848303601f190188528151805180855260005b818110156106865760208184018101518783018201520161066a565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061064f565b50909695505050505050565b6020815260006106d76020830184610631565b9392505050565b80356001600160a01b03811681146106f557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072357600080fd5b61072c836106de565b9150602083013567ffffffffffffffff81111561074857600080fd5b8301601f8101851361075957600080fd5b803567ffffffffffffffff811115610773576107736106fa565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156107a2576107a26106fa565b6040528181528282016020018710156107ba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080606085870312156107f057600080fd5b84359350610800602086016106de565b9250604085013567ffffffffffffffff81111561081c57600080fd5b8501601f8101871361082d57600080fd5b803567ffffffffffffffff81111561084457600080fd5b87602082840101111561085657600080fd5b949793965060200194505050565b6040808252835190820181905260009060208501906060840190835b818110156108a05783511515835260209384019390920191600101610880565b505083810360208501526108b48186610631565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108ea57600080fd5b9190910192915050565b60006020828403121561090657600080fd5b6106d7826106de565b6000808335601e1984360301811261092657600080fd5b83018035915067ffffffffffffffff82111561094157600080fd5b60200191503681900382131561095657600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205c0679bac7989901111b6824de732603e322da5b9b75ee077344853294d8b7b664736f6c634300081a0033", + "sourceMap": "2122:17308:113:-:0;;;;;;;;;;;;;269:20:121;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;254:36:121;;;2122:17308:113;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361061012e5760003560e01c8063a71763a8116100ab578063d828435d1161006f578063d828435d146104a2578063e9ae5c53146104c2578063ea5f61d0146104e2578063eab77e1714610502578063f2dc691d14610522578063f698da251461054257610135565b8063a71763a8146103c7578063b0d691fe146103e7578063b875d5d81461040a578063d03c791414610455578063d691c9641461047557610135565b806355d559f4116100f257806355d559f4146102dd5780635faac46b1461030d57806379aad60e1461033b5780639517e29f1461035b5780639cfd7cff1461037b57610135565b80630a664dba146101e0578063112d3a7d146102245780631626ba7e1461025457806319822f7c1461028d578063540fb4f9146102bb57610135565b3661013557005b600036606060003560e01c63bc197c81811463f23a6e6182141763150b7a028214171561016657806020526020603cf35b50336000818152600460209081526040808320546001600160e01b031984351680855260058452828520958552949092528220546001600160a01b0391821692911690806101b48484610557565b915091506101c28888610615565b95506101d084848484610728565b5050505050915050805190602001f35b3480156101ec57600080fd5b50336000908152600460205260409020546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023057600080fd5b5061024461023f366004613d49565b6107ab565b604051901515815260200161021b565b34801561026057600080fd5b5061027461026f366004613da4565b610820565b6040516001600160e01b0319909116815260200161021b565b34801561029957600080fd5b506102ad6102a8366004613e08565b610b96565b60405190815260200161021b565b3480156102c757600080fd5b506102db6102d6366004613eab565b610caa565b005b3480156102e957600080fd5b506102fd6102f8366004613fa7565b610d5a565b60405161021b9493929190614048565b34801561031957600080fd5b5061032d610328366004614094565b610fb7565b60405161021b9291906140c0565b34801561034757600080fd5b506102db610356366004614123565b610fd3565b34801561036757600080fd5b506102db610376366004613d49565b6110c8565b34801561038757600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161021b9190614164565b3480156103d357600080fd5b506102db6103e2366004613d49565b611293565b3480156103f357600080fd5b506f71727de22e5e9d8baf0edac6f37da032610207565b34801561041657600080fd5b5061020761042536600461418d565b6001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b031690565b34801561046157600080fd5b506102446104703660046141aa565b6115ba565b34801561048157600080fd5b50610495610490366004613da4565b611662565b60405161021b91906141c3565b3480156104ae57600080fd5b506102ad6104bd366004614228565b61174b565b3480156104ce57600080fd5b506102db6104dd366004613da4565b6117eb565b3480156104ee57600080fd5b5061032d6104fd366004614094565b611b88565b34801561050e57600080fd5b506102db61051d366004614267565b611b99565b34801561052e57600080fd5b5061024461053d3660046141aa565b611c08565b34801561054e57600080fd5b506102ad611c57565b6060806001600160a01b038416156105d7576105be33856000610578611cb0565b3460003660405160240161058f94939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b031663d68f602560e01b179052611cbc565b9150818060200190518101906105d491906143df565b91505b6001600160a01b0383161561060e576105f533846000610578611cb0565b90508080602001905181019061060b91906143df565b90505b9250929050565b600080356001600160e01b031916815260036020908152604080832033845290915290208054606091906001600160a01b03811690600160a01b900460f81b8161068557604051632464e76d60e11b81526001600160e01b03196000351660048201526024015b60405180910390fd5b61069381607f60f91b611d65565b156106d7576106cd338388886106a7611cb0565b6040516020016106b993929190614413565b604051602081830303815290604052611d77565b9350505050610722565b6106e2816000611d65565b1561071e576106cd3383600089896106f8611cb0565b60405160200161070a93929190614413565b604051602081830303815290604052611cbc565b5050505b92915050565b6001600160a01b0384161561077e5761077e338560008560405160240161074f9190614164565b60408051601f198184030181529190526020810180516001600160e01b0316630b9dfbed60e11b179052611e4c565b6001600160a01b038316156107a5576107a5338460008460405160240161074f9190614164565b50505050565b6000600185036107dd57336001600160a01b038516036107cd57506001610818565b6107d684611eeb565b9050610818565b600285036107ee576107d684611ef9565b60038503610801576107d6848484611f07565b60048503610814576107d6848484611f53565b5060005b949350505050565b6000338282036109ba5760006108f1826001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561086d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108919190614439565b60408051602081018a90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91015b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052611f8e565b8051602090910120604051635ae6bd3760e01b8152600481018290529091506001600160a01b03831690635ae6bd3790602401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190614439565b6000036109a85760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08185c1c1c9bdd9959607a1b604482015260640161067c565b50630b135d3f60e11b9150610b8f9050565b60006109c96014828688614452565b6109d29161447c565b60601c90508015806109ea57506109e881611eeb565b155b15610b14576000610a89836001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190614439565b60408051602081018b90527f60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca91016108c0565b805160208201209091506001600160a01b03841663934f3a118284610ab18a6014818e614452565b6040518563ffffffff1660e01b8152600401610ad094939291906144c9565b60006040518083038186803b158015610ae857600080fd5b505afa158015610afc573d6000803e3d6000fd5b50630b135d3f60e11b9750610b8f9650505050505050565b6000610b733383610b23611cb0565b8a610b318a6014818e614452565b604051602401610b4494939291906142f6565b60408051601f198184030181529190526020810180516001600160e01b0316637aa8f17760e11b179052611d77565b905080806020019051810190610b8991906144f5565b93505050505b9392505050565b60006f71727de22e5e9d8baf0edac6f37da032610bb1611cb0565b6001600160a01b031614610bd857604051635629665f60e11b815260040160405180910390fd5b6020840135606081901c90811580610bf65750610bf482611eeb565b155b15610c0b57610c0486612008565b9250610c70565b6000610c56338460008a8a604051602401610c27929190614557565b60408051601f198184030181529190526020810180516001600160e01b0316639700320360e01b179052611cbc565b905080806020019051810190610c6c9190614439565b9350505b8315610ca157610ca1336f71727de22e5e9d8baf0edac6f37da0328660405180602001604052806000815250611e4c565b50509392505050565b6f71727de22e5e9d8baf0edac6f37da032610cc3611cb0565b6001600160a01b03161480610cf05750610cdb611cb0565b6001600160a01b0316336001600160a01b0316145b610d0d57604051635629665f60e11b815260040160405180910390fd5b610d3f610d1d602083018361465b565b610d2a6020840184614678565b610d3a60608601604087016146c1565b6120b7565b610d4f898989898989898961216e565b505050505050505050565b6060600080823682610d706101008901896146dc565b9092509050610d83600660008385614452565b610d8c91614722565b60d01c9450610d9f600c60068385614452565b610da891614722565b60d01c9350610dba81600c8185614452565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610e3691508a018a61465b565b6001600160a01b0316815260200188602001358152602001888060400190610e5e91906146dc565b604051610e6c929190614758565b6040519081900390208152602001610e8760608a018a6146dc565b604051610e95929190614758565b60405180910390208152602001610eab8961248d565b6001600160801b03168152602001610ec28961249d565b6001600160801b031681526020018860a001358152602001610ee3896124b2565b6001600160801b03168152602001610efa896124c1565b6001600160801b03168152602001610f1560e08a018a6146dc565b604051610f23929190614758565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610f6f611c57565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b60606000610fc860013386866124d6565b915091509250929050565b6f71727de22e5e9d8baf0edac6f37da032610fec611cb0565b6001600160a01b031614806110195750611004611cb0565b6001600160a01b0316336001600160a01b0316145b61103657604051635629665f60e11b815260040160405180910390fd5b61104160013361269a565b8060005b81811015611097573684848381811061106057611060614768565b9050602002810190611072919061477e565b905061108e33611085602084018461465b565b60019190612715565b50600101611045565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a2505050565b336000908152600460209081526040808320547fd00bcad91b775f25eb0aee15808d12dfdaa6dc5a7d6b754e26f9c205d2a3b8df909252822054639517e29f60e01b926001600160a01b039283169290911690806111268484610557565b915091506111416f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611152611cb0565b6001600160a01b0316148061117f575061116a611cb0565b6001600160a01b0316336001600160a01b0316145b61119c57604051635629665f60e11b815260040160405180910390fd5b606060018a036111b8576111b189898961280a565b905061121d565b60028a036111cb576111b1898989612866565b60038a036111de576111b1898989612881565b60048a036111f1576111b1898989612a00565b89611201576111b1898989612ba0565b60405163041c38b360e41b8152600481018b905260240161067c565b611286337f00000000000000000000000000000000000000000000000000000000000000008c8c856040516024016112579392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316639517e29f60e01b179052612d51565b50610d4f84848484610728565b336000908152600460209081526040808320547fc45a7acaba78a7b4c4432b604d301355b314c0a7811768a1ee2563c9d34ca4e09092529091205484916314e2ec7560e31b916001600160a01b0391821691908116908416821480159061130c5750806001600160a01b0316846001600160a01b031614155b156114925760008061131e8484610557565b915091506113396f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b031661134a611cb0565b6001600160a01b031614806113775750611362611cb0565b6001600160a01b0316336001600160a01b0316145b61139457604051635629665f60e11b815260040160405180910390fd5b606060018b036113b0576113a98a8a8a612dea565b9050611415565b60028b036113c3576113a98a8a8a612e13565b60038b036113d6576113a98a8a8a612e34565b60048b036113e9576113a98a8a8a612e80565b8a6113f9576113a98a8a8a612f38565b60405163041c38b360e41b8152600481018c905260240161067c565b61147e337f00000000000000000000000000000000000000000000000000000000000000008d8d8560405160240161144f9392919061479e565b60408051601f198184030181529190526020810180516001600160e01b0316637827252560e01b17905261308b565b5061148b84848484610728565b50506115b0565b6f71727de22e5e9d8baf0edac6f37da0326114ab611cb0565b6001600160a01b031614806114d857506114c3611cb0565b6001600160a01b0316336001600160a01b0316145b6114f557604051635629665f60e11b815260040160405180910390fd5b6060600189036115115761150a888888612dea565b9050611576565b600289036115245761150a888888612e13565b600389036115375761150a888888612e34565b6004890361154a5761150a888888612e80565b8861155a5761150a888888612f38565b60405163041c38b360e41b8152600481018a905260240161067c565b610d4f337f00000000000000000000000000000000000000000000000000000000000000008b8b8560405160240161144f9392919061479e565b5050505050505050565b600081600881901b6115d082600160f81b611d65565b156115de5760019250611621565b6115e9826000611d65565b156115f75760019250611621565b611609826001600160f81b0319611d65565b156116175760019250611621565b5060009392505050565b8280156116345750611634816000611d65565b15611640575050919050565b828015611656575061165681600160f81b611d65565b15611617575050919050565b606061167461166f611cb0565b611ef9565b6116a557611680611cb0565b604051635c93ff2f60e11b81526001600160a01b03909116600482015260240161067c565b336000908152600460209081526040808320547f4162c930ade27880570b0eb31efbc8a626b97e81a40ced27163509dfe16398829092528220546335a4725960e21b926001600160a01b039283169290911690806117038484610557565b9150915061170f611cb0565b600261171b8282613141565b8a600881901b61172d81838e8e6131cc565b99505050505061173f84848484610728565b50505050509392505050565b6000602082901b640100000000600160c01b03166f71727de22e5e9d8baf0edac6f37da032604051631aab3f0d60e11b81526001600160a01b0386811660048301526001600160c01b038416602483015291909116906335567e1a90604401602060405180830381865afa1580156117c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190614439565b336000908152600460209081526040808320547fccfe1b2bef70acd8e661aeb5430e147f4c75cb320972acba718a28da428e1a3090925282205463e9ae5c5360e01b926001600160a01b039283169290911690806118498484610557565b915091506118646f71727de22e5e9d8baf0edac6f37da03290565b6001600160a01b0316611875611cb0565b6001600160a01b031614806118a2575061188d611cb0565b6001600160a01b0316336001600160a01b0316145b6118bf57604051635629665f60e11b815260040160405180910390fd5b87600881901b336118d1826000611d65565b15611a2a576118e483600160f81b611d65565b156119055789358a016020810190356118fe838383613574565b5050611b79565b611910836000611d65565b15611978576000803660006119258e8e6135db565b935093509350935061196f85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4c92505050565b50505050611b79565b61198a836001600160f81b0319611d65565b15611a0f57600061199e6014828c8e614452565b6119a79161447c565b60601c90503660008c8c60149080926119c293929190614452565b91509150611a07848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d5192505050565b505050611b79565b82604051632e5bf3f960e21b815260040161067c91906147d1565b611a3882600160f81b611d65565b15611b5e57611a4b83600160f81b611d65565b15611a655789358a016020810190356118fe83838361362c565b611a70836000611d65565b15611acf57600080366000611a858e8e6135db565b935093509350935061196f85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061369392505050565b611ae1836001600160f81b0319611d65565b15611a0f576000611af56014828c8e614452565b611afe9161447c565b60601c90503660008c8c6014908092611b1993929190614452565b91509150611a07848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061308b92505050565b816040516308c3ee0360e11b815260040161067c91906147d1565b5050506115b084848484610728565b60606000610fc860023386866124d6565b6f71727de22e5e9d8baf0edac6f37da032611bb2611cb0565b6001600160a01b03161480611bdf5750611bca611cb0565b6001600160a01b0316336001600160a01b0316145b611bfc57604051635629665f60e11b815260040160405180910390fd5b6107a5848484846120b7565b600060018203611c1a57506001919050565b60028203611c2a57506001919050565b60038203611c3a57506001919050565b60048203611c4a57506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60131936013560601c90565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401611cf3949392919061481e565b6000604051808303816000875af1158015611d12573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d3a9190810190614864565b9250905080611d5c57604051632b3f6d1160e21b815260040160405180910390fd5b50949350505050565b6001600160f81b031990811691161490565b606060008383604051602401611d8e9291906148b1565b60408051601f198184030181529181526020820180516001600160e01b0316636a22165760e01b17905251909150600090611def907f00000000000000000000000000000000000000000000000000000000000000009084906024016148b1565b60408051601f19818403018152919052602080820180516001600160e01b031663b4faba0960e01b17815282519293509091600091895afa5060203d036040519350808401604052806020853e50600051610ca157825160208401fd5b60405163468721a760e01b81526000906001600160a01b0386169063468721a790611e8190879087908790879060040161481e565b6020604051808303816000875af1158015611ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec491906148d5565b905080611ee457604051632b3f6d1160e21b815260040160405180910390fd5b5050505050565b600061072260013384613749565b600061072260023384613749565b600080611f168385018561418d565b6001600160e01b03191660009081526003602090815260408083203384529091529020546001600160a01b03908116908616149150509392505050565b60008080611f63848601866148ff565b915091506000611f73838361378d565b6001600160a01b039081169088161493505050509392505050565b6060601960f81b600160f81b858585604051602001611fae92919061492b565b60408051808303601f190181529082905280516020918201206001600160f81b0319958616918301919091529290931660218401526022830152604282015260620160405160208183030381529060405290509392505050565b600080808080612028866f71727de22e5e9d8baf0edac6f37da032610d5a565b8351602085012060405163934f3a1160e01b81529498509296509094509250339163934f3a119161205f9188908690600401614951565b60006040518083038186803b15801561207757600080fd5b505afa925050508015612088575060015b61209f5761209860018385613823565b94506120ae565b6120ab60008385613823565b94505b50505050919050565b33600090815260208190526040902080546001600160a01b0319166001600160a01b0386169081179091551561213257612132338560008487876040516024016121039392919061497c565b60408051601f198184030181529190526020810180516001600160e01b031663f05c04e160e01b179052611e4c565b6040516001600160a01b0385169033907f9452c8fb077c3ea8f28a77c87488af657b1e44d010ad9a5992d73870da040e9490600090a350505050565b3360009081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f602052604090205460609088906001600160a01b0316612266576121ba60013361269a565b60005b8181101561226057368b8b838181106121d8576121d8614768565b90506020028101906121ea919061477e565b905061220e6121fc602083018361465b565b61220960208401846146dc565b61280a565b9350612257337f00000000000000000000000000000000000000000000000000000000000000006001612244602086018661465b565b886040516024016112579392919061479e565b506001016121bd565b50612287565b80156122875760405163d8e3ed1b60e01b815233600482015260240161067c565b61229260023361269a565b508560005b8181101561232757368989838181106122b2576122b2614768565b90506020028101906122c4919061477e565b90506122e86122d6602083018361465b565b6122e360208401846146dc565b612866565b935061231e337f00000000000000000000000000000000000000000000000000000000000000006002612244602086018661465b565b50600101612297565b5084905060005b818110156123be573687878381811061234957612349614768565b905060200281019061235b919061477e565b905061237f61236d602083018361465b565b61237a60208401846146dc565b612881565b93506123b5337f00000000000000000000000000000000000000000000000000000000000000006003612244602086018661465b565b5060010161232e565b5082905060005b8181101561245557368585838181106123e0576123e0614768565b90506020028101906123f2919061477e565b9050612416612404602083018361465b565b61241160208401846146dc565b612a00565b935061244c337f00000000000000000000000000000000000000000000000000000000000000006004612244602086018661465b565b506001016123c5565b5060405133907ff48581d8a62b775b74f2fb67f1d5806a9a356fbcc598040ab3071d3e37af40c290600090a250505050505050505050565b6000610722826080013560801c90565b60006001600160801b03608083013516610722565b600060c082013560801c610722565b60006001600160801b0360c083013516610722565b606060006001600160a01b0384166001148015906124fc57506124fa868686613749565b155b1561252557604051637c84ecfb60e01b81526001600160a01b038516600482015260240161067c565b826000036125465760405163f725081760e01b815260040160405180910390fd5b826001600160401b0381111561255e5761255e614328565b604051908082528060200260200182016040528015612587578160200160208202803683370190505b506001600160a01b038086166000908152602089815260408083208a85168452909152812054929450911691505b6001600160a01b038216158015906125d757506001600160a01b038216600114155b80156125e257508381105b1561264757818382815181106125fa576125fa614768565b6001600160a01b039283166020918202929092018101919091529281166000908152888452604080822089841683529094529290922054909116908061263f816149ea565b9150506125b5565b6001600160a01b0382166001148015906126615750600081115b1561268d5782612672600183614a03565b8151811061268257612682614768565b602002602001015191505b8083525094509492505050565b60016000908152602083815260408083206001600160a01b03808616855292529091205416156126dd576040516329e42f3360e11b815260040160405180910390fd5b60016000818152602093845260408082206001600160a01b0394909416825292909352912080546001600160a01b0319169091179055565b6001600160a01b038116158061273457506001600160a01b0381166001145b1561275d57604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b03818116600090815260208581526040808320868516845290915290205416156127ac57604051631034f46960e21b81526001600160a01b038216600482015260240161067c565b60016000908152602084815260408083206001600160a01b039586168085528184528285208054968816808752988552838620918652908452919093208054949095166001600160a01b031994851617909455528154169091179055565b60608360016128198282613141565b61282560013388612715565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b60608360026128758282613141565b61282560023388612715565b60608360036128908282613141565b600080806128a087890189614a67565b919450925090506001600160e01b031983166306d61fe760e41b14806128d657506001600160e01b03198316638a91b0e360e01b145b15612900576040516379bd117b60e01b81526001600160e01b03198416600482015260240161067c565b61290b826000611d65565b8015612920575061292082607f60f91b611d65565b1561294057816040516376087dc160e01b815260040161067c91906147d1565b6001600160e01b0319831660009081526003602090815260408083203384529091529020546001600160a01b031615612998576040516374420d1560e01b81526001600160e01b03198416600482015260240161067c565b6001600160e01b03199092166000908152600360209081526040808320338452909152902080546001600160a01b038a166001600160a01b031960f89490941c600160a01b02939093166001600160a81b031990911617919091179055925050509392505050565b6060836004612a0f8282613141565b60008080612a1f87890189614ad5565b91945092509050600080846001811115612a3b57612a3b6147e6565b148015612a5057506001600160e01b03198316155b15612ac65750336000908152600460205260409020546001600160a01b03168015612a995760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b33600090815260046020526040902080546001600160a01b0319166001600160a01b038c16179055612b93565b6001846001811115612ada57612ada6147e6565b03612b7a57506001600160e01b0319821660009081526005602090815260408083203384529091529020546001600160a01b03168015612b385760405163741cbe0360e01b81526001600160a01b038216600482015260240161067c565b6001600160e01b031983166000908152600560209081526040808320338452909152902080546001600160a01b0319166001600160a01b038c16179055612b93565b604051635691922f60e01b815260040160405180910390fd5b5098975050505050505050565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612be85760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612c0757612c07614768565b90506020020135905060018103612c4657612c408d888885818110612c2e57612c2e614768565b905060200281019061220991906146dc565b50612d01565b60028103612c7657612c408d888885818110612c6457612c64614768565b90506020028101906122e391906146dc565b60038103612ca657612c408d888885818110612c9457612c94614768565b905060200281019061237a91906146dc565b60048103612cd657612c408d888885818110612cc457612cc4614768565b905060200281019061241191906146dc565b60405163484d218160e01b81526001600160a01b038e1660048201526024810182905260440161067c565b50600101612beb565b5082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929e9d5050505050505050505050505050565b60405163468721a760e01b81526000906001600160a01b0385169063468721a790612d879086908590879060019060040161481e565b6020604051808303816000875af1158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca91906148d5565b9050806107a557604051632b3f6d1160e21b815260040160405180910390fd5b60606000612dfa83850185614b03565b92509050612e0b600133838861385b565b509392505050565b60606000612e2383850185614b03565b92509050612e0b600233838861385b565b60606000612e4483850185614b48565b6001600160e01b03199091166000908152600360209081526040808320338452909152902080546001600160a01b031916905595945050505050565b6060600080612e9184860186614ad5565b945090925090506000826001811115612eac57612eac6147e6565b148015612ec157506001600160e01b03198116155b15612ee85733600090815260046020526040902080546001600160a01b0319169055610ca1565b6001826001811115612efc57612efc6147e6565b03612b7a576001600160e01b031981166000908152600560209081526040808320338452909152902080546001600160a01b0319169055610ca1565b60608235830160208181019135908581013586018082019190359060408801358801908101903584838114612f805760405163b4fa3fb360e01b815260040160405180910390fd5b60005b81811015612d0a576000888883818110612f9f57612f9f614768565b90506020020135905060018103612fe357612fdd8d888885818110612fc657612fc6614768565b9050602002810190612fd891906146dc565b612dea565b50613082565b6002810361301857612fdd8d88888581811061300157613001614768565b905060200281019061301391906146dc565b612e13565b6003810361304d57612fdd8d88888581811061303657613036614768565b905060200281019061304891906146dc565b612e34565b60048103612cd657612fdd8d88888581811061306b5761306b614768565b905060200281019061307d91906146dc565b612e80565b50600101612f83565b60405163468721a760e01b81526000906001600160a01b0385169063468721a7906130c19086908590879060019060040161481e565b6020604051808303816000875af11580156130e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310491906148d5565b9050806107a557604080516001600160a01b038616815260006020820152600080516020614dd9833981519152910160405180910390a150505050565b336000908152602081905260409020546001600160a01b031680156131c75760405163529562a160e01b81523360048201526001600160a01b0384811660248301526044820184905282169063529562a19060640160006040518083038186803b1580156131ae57600080fd5b505afa1580156131c2573d6000803e3d6000fd5b505050505b505050565b60606131d9856000611d65565b156133c5576131ec84600160f81b611d65565b1561320f5782358301602081019035613206338383613952565b92505050610818565b61321a846000611d65565b156132ce5760008036600061322f87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161324e5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cbc92505050565b856000815181106132ba576132ba614768565b602002602001018190525050505050610818565b6132e0846001600160f81b0319611d65565b156133aa5760006132f46014828587614452565b6132fd9161447c565b60601c90503660006133128560148189614452565b604080516001808252818301909252929450909250816020015b606081526020019060019003908161332c579050509350613384338484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139ce92505050565b8460008151811061339757613397614768565b6020026020010181905250505050610818565b83604051632e5bf3f960e21b815260040161067c91906147d1565b6133d385600160f81b611d65565b15613559576133e684600160f81b611d65565b1561340b5782358301602081019035613400338383613a6f565b935061081892505050565b613416846000611d65565b156134a35760008036600061342b87876135db565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161344a5790505094506132a733858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b6592505050565b6134b5846001600160f81b0319611d65565b156133aa5760006134c96014828587614452565b6134d29161447c565b60601c90503660006134e78560148189614452565b604080516001808252818301909252929450909250816020015b6060815260200190600190039081613501579050509350613384338484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613c2592505050565b846040516308c3ee0360e11b815260040161067c91906147d1565b6131c7837f000000000000000000000000000000000000000000000000000000000000000084846040516024016135ac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316633f707e6b60e01b179052612d51565b60008036816135ed6014828789614452565b6135f69161447c565b60601c9350613609603460148789614452565b61361291614c18565b92506136218560348189614452565b949793965094505050565b6131c7837f00000000000000000000000000000000000000000000000000000000000000008484604051602401613664929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316632864481160e11b17905261308b565b60405163468721a760e01b81526000906001600160a01b0386169063468721a7906136c890879087908790879060040161481e565b6020604051808303816000875af11580156136e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370b91906148d5565b905080611ee457604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a15050505050565b600060016001600160a01b038316148015906108185750506001600160a01b0390811660009081526020938452604080822093831682529290935291205416151590565b6000808360018111156137a2576137a26147e6565b1480156137b757506001600160e01b03198216155b156137d75750336000908152600460205260409020546001600160a01b03165b60018360018111156137eb576137eb6147e6565b0361072257506001600160e01b03191660009081526005602090815260408083203384529091529020546001600160a01b0316919050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561384b57600061384e565b60015b60ff161717949350505050565b6001600160a01b038116158061387a57506001600160a01b0381166001145b156138a357604051637c84ecfb60e01b81526001600160a01b038316600482015260240161067c565b6001600160a01b0382811660009081526020868152604080832087851684529091529020548116908216146138f657604051637c84ecfb60e01b81526001600160a01b038216600482015260240161067c565b6001600160a01b039081166000908152602085815260408083209584168084528683528184208054968616855297835281842090845282529091208054939092166001600160a01b031993841617909155919091528154169055565b60606139bb847f0000000000000000000000000000000000000000000000000000000000000000858560405160240161398c929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316636108557360e01b1790526139ce565b8060200190518101906108189190614ce5565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613a06949392919061481e565b6000604051808303816000875af1158015613a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a4d9190810190614864565b9250905080612e0b57604051632b3f6d1160e21b815260040160405180910390fd5b6060806000613adb867f00000000000000000000000000000000000000000000000000000000000000008787604051602401613aac929190614b66565b60408051601f198184030181529190526020810180516001600160e01b0316639abb6e1760e01b179052613c25565b905080806020019051810190613af19190614d19565b8151919450925060005b81811015613b5a57848181518110613b1557613b15614768565b6020026020010151613b5257604080516001600160a01b038a16815260208101839052600080516020614dd9833981519152910160405180910390a15b600101613afb565b505050935093915050565b60606000856001600160a01b0316635229073f86868660006040518563ffffffff1660e01b8152600401613b9c949392919061481e565b6000604051808303816000875af1158015613bbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613be39190810190614864565b9250905080611d5c57604080516001600160a01b038816815260006020820152600080516020614dd9833981519152910160405180910390a150949350505050565b60606000846001600160a01b0316635229073f8560008660016040518563ffffffff1660e01b8152600401613c5d949392919061481e565b6000604051808303816000875af1158015613c7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ca49190810190614864565b9250905080612e0b57604080516001600160a01b038716815260006020820152600080516020614dd9833981519152910160405180910390a1509392505050565b6001600160a01b0381168114613cfa57600080fd5b50565b8035611c5281613ce5565b60008083601f840112613d1a57600080fd5b5081356001600160401b03811115613d3157600080fd5b60208301915083602082850101111561060e57600080fd5b60008060008060608587031215613d5f57600080fd5b843593506020850135613d7181613ce5565b925060408501356001600160401b03811115613d8c57600080fd5b613d9887828801613d08565b95989497509550505050565b600080600060408486031215613db957600080fd5b8335925060208401356001600160401b03811115613dd657600080fd5b613de286828701613d08565b9497909650939450505050565b60006101208284031215613e0257600080fd5b50919050565b600080600060608486031215613e1d57600080fd5b83356001600160401b03811115613e3357600080fd5b613e3f86828701613def565b9660208601359650604090950135949350505050565b60008083601f840112613e6757600080fd5b5081356001600160401b03811115613e7e57600080fd5b6020830191508360208260051b850101111561060e57600080fd5b600060608284031215613e0257600080fd5b600080600080600080600080600060a08a8c031215613ec957600080fd5b89356001600160401b03811115613edf57600080fd5b613eeb8c828d01613e55565b909a5098505060208a01356001600160401b03811115613f0a57600080fd5b613f168c828d01613e55565b90985096505060408a01356001600160401b03811115613f3557600080fd5b613f418c828d01613e55565b90965094505060608a01356001600160401b03811115613f6057600080fd5b613f6c8c828d01613e55565b90945092505060808a01356001600160401b03811115613f8b57600080fd5b613f978c828d01613e99565b9150509295985092959850929598565b60008060408385031215613fba57600080fd5b82356001600160401b03811115613fd057600080fd5b613fdc85828601613def565b9250506020830135613fed81613ce5565b809150509250929050565b60005b83811015614013578181015183820152602001613ffb565b50506000910152565b60008151808452614034816020860160208601613ff8565b601f01601f19169290920160200192915050565b60808152600061405b608083018761401c565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152614089818561401c565b979650505050505050565b600080604083850312156140a757600080fd5b82356140b281613ce5565b946020939093013593505050565b6040808252835190820181905260009060208501906060840190835b818110156141035783516001600160a01b03168352602093840193909201916001016140dc565b50506001600160a01b039490941660209390930192909252509092915050565b6000806020838503121561413657600080fd5b82356001600160401b0381111561414c57600080fd5b61415885828601613e55565b90969095509350505050565b602081526000610b8f602083018461401c565b6001600160e01b031981168114613cfa57600080fd5b60006020828403121561419f57600080fd5b8135610b8f81614177565b6000602082840312156141bc57600080fd5b5035919050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561421c57603f1987860301845261420785835161401c565b945060209384019391909101906001016141eb565b50929695505050505050565b6000806040838503121561423b57600080fd5b823561424681613ce5565b91506020830135613fed81613ce5565b803560ff81168114611c5257600080fd5b6000806000806060858703121561427d57600080fd5b843561428881613ce5565b935060208501356001600160401b038111156142a357600080fd5b6142af87828801613e55565b90945092506142c2905060408601614256565b905092959194509250565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038516815283602082015260606040820152600061431e6060830184866142cd565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561436657614366614328565b604052919050565b60006001600160401b0382111561438757614387614328565b50601f01601f191660200190565b600082601f8301126143a657600080fd5b81516143b96143b48261436e565b61433e565b8181528460208386010111156143ce57600080fd5b610818826020830160208701613ff8565b6000602082840312156143f157600080fd5b81516001600160401b0381111561440757600080fd5b61081884828501614395565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60006020828403121561444b57600080fd5b5051919050565b6000808585111561446257600080fd5b8386111561446f57600080fd5b5050820193919092039150565b80356bffffffffffffffffffffffff1981169060148410156144c2576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b8481526060602082015260006144e2606083018661401c565b82810360408401526140898185876142cd565b60006020828403121561450757600080fd5b8151610b8f81614177565b6000808335601e1984360301811261452957600080fd5b83016020810192503590506001600160401b0381111561454857600080fd5b80360382131561060e57600080fd5b604081526145786040820161456b85613cfd565b6001600160a01b03169052565b6020830135606082015260006145916040850185614512565b61012060808501526145a8610160850182846142cd565b9150506145b86060860186614512565b848303603f190160a08601526145cf8382846142cd565b608088013560c08781019190915260a089013560e0808901919091529089013561010088015290935061460792508701905086614512565b848303603f190161012086015261461f8382846142cd565b92505050614631610100860186614512565b848303603f19016101408601526146498382846142cd565b93505050508260208301529392505050565b60006020828403121561466d57600080fd5b8135610b8f81613ce5565b6000808335601e1984360301811261468f57600080fd5b8301803591506001600160401b038211156146a957600080fd5b6020019150600581901b360382131561060e57600080fd5b6000602082840312156146d357600080fd5b610b8f82614256565b6000808335601e198436030181126146f357600080fd5b8301803591506001600160401b0382111561470d57600080fd5b60200191503681900382131561060e57600080fd5b80356001600160d01b031981169060068410156144c2576001600160d01b031960069490940360031b84901b1690921692915050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235603e1983360301811261479457600080fd5b9190910192915050565b8381526001600160a01b03831660208201526060604082018190526000906147c89083018461401c565b95945050505050565b6001600160f81b031991909116815260200190565b634e487b7160e01b600052602160045260246000fd5b6002811061481a57634e487b7160e01b600052602160045260246000fd5b9052565b60018060a01b0385168152836020820152608060408201526000614845608083018561401c565b90506147c860608301846147fc565b80518015158114611c5257600080fd5b6000806040838503121561487757600080fd5b61488083614854565b915060208301516001600160401b0381111561489b57600080fd5b6148a785828601614395565b9150509250929050565b6001600160a01b03831681526040602082018190526000906108189083018461401c565b6000602082840312156148e757600080fd5b610b8f82614854565b803560028110611c5257600080fd5b6000806040838503121561491257600080fd5b61491b836148f0565b91506020830135613fed81614177565b82815260008251614943816020850160208701613ff8565b919091016020019392505050565b83815260606020820152600061496a606083018561401c565b828103604084015261431e818561401c565b60ff84168152604060208201819052810182905260008360608301825b858110156149c95782356149ac81613ce5565b6001600160a01b0316825260209283019290910190600101614999565b509695505050505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016149fc576149fc6149d4565b5060010190565b81810381811115610722576107226149d4565b600082601f830112614a2757600080fd5b8135614a356143b48261436e565b818152846020838601011115614a4a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614a7c57600080fd5b8335614a8781614177565b925060208401356001600160f81b031981168114614aa457600080fd5b915060408401356001600160401b03811115614abf57600080fd5b614acb86828701614a16565b9150509250925092565b600080600060608486031215614aea57600080fd5b614af3846148f0565b92506020840135614aa481614177565b60008060408385031215614b1657600080fd5b8235614b2181613ce5565b915060208301356001600160401b03811115614b3c57600080fd5b6148a785828601614a16565b60008060408385031215614b5b57600080fd5b8235614b2181614177565b6020808252810182905260006040600584901b830181019083018583605e1936839003015b87821015614c0b57868503603f190184528235818112614baa57600080fd5b89018035614bb781613ce5565b6001600160a01b0316865260208181013590870152614bd96040820182614512565b915060606040880152614bf06060880183836142cd565b96505050602083019250602084019350600182019150614b8b565b5092979650505050505050565b8035602083101561072257600019602084900360031b1b1692915050565b60006001600160401b03821115614c4f57614c4f614328565b5060051b60200190565b600082601f830112614c6a57600080fd5b8151614c786143b482614c36565b8082825260208201915060208360051b860101925085831115614c9a57600080fd5b602085015b83811015614cdb5780516001600160401b03811115614cbd57600080fd5b614ccc886020838a0101614395565b84525060209283019201614c9f565b5095945050505050565b600060208284031215614cf757600080fd5b81516001600160401b03811115614d0d57600080fd5b61081884828501614c59565b60008060408385031215614d2c57600080fd5b82516001600160401b03811115614d4257600080fd5b8301601f81018513614d5357600080fd5b8051614d616143b482614c36565b8082825260208201915060208360051b850101925087831115614d8357600080fd5b6020840193505b82841015614dac57614d9b84614854565b825260209384019390910190614d8a565b8095505050505060208301516001600160401b03811115614dcc57600080fd5b6148a785828601614c5956feb8bc84bd77f5eb08210b8eb20fd63b3ec6a7992d277ab94663bae0e066f792aca2646970667358221220ea7603497be0a0e1ddc106666c75af038c8db18b0f9143f6418b0e8b232c109164736f6c634300081a0033", + "sourceMap": "2122:17308:113:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9566:24:118;728:1:71;715:15;710:3;706:25;1058:10;1055:1;1052:17;1039:10;1036:1;1033:17;1030:40;1017:10;1014:1;1011:17;1008:63;1005:190;;;1103:1;1097:4;1090:15;1097:4;1149;1142:18;1005:190;-1:-1:-1;13275:10:118::1;9540:7;13263:23:::0;;;:11:::1;:23;::::0;;;;;;;;-1:-1:-1;;;;;;9540:7:118;::::1;;13314:22:::0;;;:12:::1;:22:::0;;;;;:34;;;;;;;;;;-1:-1:-1;;;;;13263:23:118;;::::1;::::0;13314:34;::::1;::::0;9540:7;13400:30:::1;13263:23:::0;13314:34;13400:9:::1;:30::i;:::-;13358:72;;;;9660:30:::2;9681:8;;9660:20;:30::i;:::-;9653:37;;13451:44:::1;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;:::-;13232:270;;;;1214:1:71;9388:309:118::0;;;2122:17308:113;;;;;;17023:107:118;;;;;;;;;;-1:-1:-1;17112:10:118;17069:12;17100:23;;;:11;:23;;;;;;-1:-1:-1;;;;;17100:23:118;17023:107;;;-1:-1:-1;;;;;287:32:153;;;269:51;;257:2;242:18;17023:107:118;;;;;;;;18241:908:113;;;;;;;;;;-1:-1:-1;18241:908:113;;;;;:::i;:::-;;:::i;:::-;;;1792:14:153;;1785:22;1767:41;;1755:2;1740:18;18241:908:113;1627:187:153;13195:1835:113;;;;;;;;;;-1:-1:-1;13195:1835:113;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;2509:33:153;;;2491:52;;2479:2;2464:18;13195:1835:113;2347:202:153;10726:1310:113;;;;;;;;;;-1:-1:-1;10726:1310:113;;;;;:::i;:::-;;:::i;:::-;;;3492:25:153;;;3480:2;3465:18;10726:1310:113;3346:177:153;1867:508:117;;;;;;;;;;-1:-1:-1;1867:508:117;;;;;:::i;:::-;;:::i;:::-;;976:3275:120;;;;;;;;;;-1:-1:-1;976:3275:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;3752:352:118:-;;;;;;;;;;-1:-1:-1;3752:352:118;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1037:779:117:-;;;;;;;;;;-1:-1:-1;1037:779:117;;;;;:::i;:::-;;:::i;15081:1421:113:-;;;;;;;;;;-1:-1:-1;15081:1421:113;;;;;:::i;:::-;;:::i;541:135:122:-;;;;;;;;;;-1:-1:-1;634:35:122;;;;;;;;;;;;;;;;541:135;;;;634:35;541:135;:::i;16553:1637:113:-;;;;;;;;;;-1:-1:-1;16553:1637:113;;;;;:::i;:::-;;:::i;895:135:115:-;;;;;;;;;;-1:-1:-1;981:42:115;895:135;;16884:133:118;;;;;;;;;;-1:-1:-1;16884:133:118;;;;;:::i;:::-;-1:-1:-1;;;;;;16976:22:118;16945:12;16976:22;;;:12;:22;;;;;;;;16999:10;16976:34;;;;;;;;-1:-1:-1;;;;;16976:34:118;;16884:133;682:712:122;;;;;;;;;;-1:-1:-1;682:712:122;;;;;:::i;:::-;;:::i;6201:660:113:-;;;;;;;;;;-1:-1:-1;6201:660:113;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19200:228::-;;;;;;;;;;-1:-1:-1;19200:228:113;;;;;:::i;:::-;;:::i;2731:3419::-;;;;;;;;;;-1:-1:-1;2731:3419:113;;;;;:::i;:::-;;:::i;6056:350:118:-;;;;;;;;;;-1:-1:-1;6056:350:118;;;;;:::i;:::-;;:::i;6064:234:117:-;;;;;;;;;;-1:-1:-1;6064:234:117;;;;;:::i;:::-;;:::i;1400:373:122:-;;;;;;;;;;-1:-1:-1;1400:373:122;;;;;:::i;:::-;;:::i;4257:150:120:-;;;;;;;;;;;;;:::i;11504:843:118:-;11616:19;;-1:-1:-1;;;;;11673:24:118;;;11669:339;;11722:225;11764:10;11801;11836:1;11897:12;:10;:12::i;:::-;11911:9;11922:8;;11865:67;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11865:67:118;;;;;;;;;;;;;;-1:-1:-1;;;;;11865:67:118;-1:-1:-1;;;11865:67:118;;;11722:11;:225::i;:::-;11713:234;;11981:6;11970:27;;;;;;;;;;;;:::i;:::-;11961:36;;11669:339;-1:-1:-1;;;;;12021:21:118;;;12017:324;;12064:222;12106:10;12143:7;12175:1;12236:12;:10;:12::i;12064:222::-;12058:228;;12317:3;12306:24;;;;;;;;;;;;:::i;:::-;12300:30;;12017:324;11504:843;;;;;:::o;9703:1249::-;9885:34;9939:7;;-1:-1:-1;;;;;;9939:7:118;9922:25;;:16;:25;;;;;;;;9948:10;9922:37;;;;;;;9987:18;;9791:24;;9922:37;-1:-1:-1;;;;;9987:18:118;;;-1:-1:-1;;;10035:19:118;;;;9987:18;10120:60;;10154:26;;-1:-1:-1;;;10154:26:118;;-1:-1:-1;;;;;;10172:7:118;;;10154:26;;;2491:52:153;2464:18;;10154:26:118;;;;;;;;10120:60;10403:27;:8;-1:-1:-1;;;10403:27:118;:::i;:::-;10399:259;;;10453:194;10501:10;10538:7;10590:8;;10600:12;:10;:12::i;:::-;10573:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10453:17;:194::i;:::-;10446:201;;;;;;;10399:259;10671:27;:8;2789:4:131;10671:27:118;:::i;:::-;10667:279;;;10721:214;10763:10;10800:7;10832:1;10878:8;;10888:12;:10;:12::i;:::-;10861:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10721:11;:214::i;10667:279::-;9821:1131;;;9703:1249;;;;;:::o;12417:667::-;-1:-1:-1;;;;;12586:24:118;;;12582:248;;12626:193;12662:10;12699;12734:1;12796:6;12763:41;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12763:41:118;;;;;;;;;;;;;;-1:-1:-1;;;;;12763:41:118;-1:-1:-1;;;12763:41:118;;;12626:5;:193::i;:::-;-1:-1:-1;;;;;12843:21:118;;;12839:239;;12880:187;12916:10;12953:7;12985:1;13047:3;13014:38;;;;;;;;:::i;12880:187::-;12417:667;;;;:::o;18241:908:113:-;18415:4;276:1:76;18439:10:113;:35;18435:708;;18661:10;-1:-1:-1;;;;;18651:20:113;;;18647:37;;-1:-1:-1;18680:4:113;18673:11;;18647:37;18705:29;18727:6;18705:21;:29::i;:::-;18698:36;;;;18435:708;319:1:76;18755:10:113;:34;18751:392;;18812:28;18833:6;18812:20;:28::i;18751:392::-;362:1:76;18861:10:113;:34;18857:286;;18918:54;18946:6;18954:17;;18918:27;:54::i;18857:286::-;401:1:76;18993:10:113;:30;18989:154;;19046:43;19063:6;19071:17;;19046:16;:43::i;18989:154::-;-1:-1:-1;19127:5:113;18989:154;18241:908;;;;;;:::o;13195:1835::-;13325:17;13377:10;13447:16;;;13443:467;;13479:19;13528:186;13574:4;-1:-1:-1;;;;;13574:20:113;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13678:16;;;;;;3492:25:153;;;2480:66:113;;3465:18:153;13678:16:113;;;;-1:-1:-1;;13678:16:113;;;;;;;;;13668:27;;13678:16;13668:27;;;;13657:39;;;3492:25:153;3465:18;13657:39:113;;;;;;;;;;;;13528:24;:186::i;:::-;13501:227;;;;;;;13751:32;;-1:-1:-1;;;13751:32:113;;;;;3492:25:153;;;13501:227:113;;-1:-1:-1;;;;;;13751:19:113;;;;;3465:18:153;;13751:32:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13787:1;13751:37;13743:67;;;;-1:-1:-1;;;13743:67:113;;16335:2:153;13743:67:113;;;16317:21:153;16374:2;16354:18;;;16347:30;-1:-1:-1;;;16393:18:153;;;16386:47;16450:18;;13743:67:113;16133:341:153;13743:67:113;-1:-1:-1;;;;13865:34:113;-1:-1:-1;13858:41:113;;-1:-1:-1;13858:41:113;13443:467;13919:24;13962:9;13968:2;13919:24;13962:4;;:9;:::i;:::-;13954:18;;;:::i;:::-;13946:27;;;-1:-1:-1;14166:30:113;;;:74;;;14201:39;14223:16;14201:21;:39::i;:::-;14200:40;14166:74;14162:456;;;14256:24;14283:138;14325:4;-1:-1:-1;;;;;14325:20:113;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14389:16;;;;;;3492:25:153;;;2480:66:113;;3465:18:153;14389:16:113;3346:177:153;14283:138:113;14458:22;;;;;;14256:165;;-1:-1:-1;;;;;;14495:20:113;;;14458:22;14256:165;14542:9;:4;14547:2;14542:4;;:9;:::i;:::-;14495:57;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;14573:34:113;-1:-1:-1;14566:41:113;;-1:-1:-1;;;;;;;14566:41:113;14162:456;14712:16;14731:244;14775:10;14808:16;14920:12;:10;:12::i;:::-;14934:4;14940:9;:4;14945:2;14940:4;;:9;:::i;:::-;14848:116;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;14848:116:113;;;;;;;;;;;;;;-1:-1:-1;;;;;14848:116:113;-1:-1:-1;;;14848:116:113;;;14731:17;:244::i;:::-;14712:263;;15009:3;14998:25;;;;;;;;;;;;:::i;:::-;14985:38;;13348:1682;;;13195:1835;;;;;;:::o;10726:1310::-;10923:22;981:42:115;783:12;:10;:12::i;:::-;-1:-1:-1;;;;;783:28:115;;779:93;;834:27;;-1:-1:-1;;;834:27:115;;;;;;;;;;;779:93;11004:12:113::1;::::0;::::1;;11123:2;11119:14:::0;;::::1;::::0;11236:23;;;:60:::1;;;11264:32;11286:9;11264:21;:32::i;:::-;11263:33;11236:60;11232:536;;;11329:27;11349:6;11329:19;:27::i;:::-;11312:44;;11232:536;;;11453:20;11476:220;11518:10;11555:9;11589:1;11661:6;11669:10;11618:63;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;11618:63:113;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;11618:63:113::1;-1:-1:-1::0;;;11618:63:113::1;::::0;;11476:11:::1;:220::i;:::-;11453:243;;11738:7;11727:30;;;;;;;;;;;;:::i;:::-;11710:47;;11373:395;11232:536;11805:24:::0;;11801:229:::1;;11845:174;11881:10;981:42:115::0;11955:19:113::1;11845:174;;;;;;;;;;;::::0;:5:::1;:174::i;:::-;10951:1085;;10726:1310:::0;;;;;:::o;1867:508:117:-;981:42:115;583:12;:10;:12::i;:::-;-1:-1:-1;;;;;583:28:115;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1;;;;;615:26:115;:10;-1:-1:-1;;;;;615:26:115;;583:58;577:126;;665:27;;-1:-1:-1;;;665:27:115;;;;;;;;;;;577:126;2165:89:117::1;2184:21;;::::0;::::1;:12:::0;:21:::1;:::i;:::-;2207:22;;::::0;::::1;:12:::0;:22:::1;:::i;:::-;2231;::::0;;;::::1;::::0;::::1;;:::i;:::-;2165:18;:89::i;:::-;2315:53;2328:10;;2340:9;;2351;;2362:5;;2315:12;:53::i;:::-;1867:508:::0;;;;;;;;;:::o;976:3275:120:-;1132:26;1172:17;;1132:26;1480:18;1172:17;1501:16;;;;:6;:16;:::i;:::-;1480:37;;-1:-1:-1;1480:37:120;-1:-1:-1;1558:8:120;1564:1;1562;1480:37;;1558:8;:::i;:::-;1551:16;;;:::i;:::-;1544:24;;;-1:-1:-1;1609:9:120;1615:2;1613:1;1609:3;;:9;:::i;:::-;1602:17;;;:::i;:::-;1595:25;;;-1:-1:-1;1647:8:120;:3;1651:2;1647:3;;:8;:::i;:::-;1634:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2706:830:120;;;;;;;;;193:66:128;2706:830:120;;1634:21;;-1:-1:-1;1634:21:120;-1:-1:-1;2706:830:120;;-1:-1:-1;;2706:830:120;;;;;-1:-1:-1;2794:13:120;;-1:-1:-1;2794:13:120;;:6;:13;:::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;2832:6;:12;;;2706:830;;;;2886:6;:15;;;;;;;;:::i;:::-;2876:26;;;;;;;:::i;:::-;;;;;;;;;2706:830;;;;2944:15;;;;:6;:15;:::i;:::-;2934:26;;;;;;;:::i;:::-;;;;;;;;2706:830;;;;3008:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3084:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3150:6;:25;;;2706:830;;;;3223:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3299:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3377:23;;;;:6;:23;:::i;:::-;3367:34;;;;;;;:::i;:::-;;;;;;;;;;;2706:830;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2706:830:120;;;;;;;4089:3;4064:29;;2663:873;;-1:-1:-1;;;;;;;4198:17:120;:15;:17::i;:::-;4153:81;;-1:-1:-1;;;;;;23370:26:153;;;4153:81:120;;;23358:39:153;23426:26;;;;23413:11;;;23406:47;23469:11;;;23462:27;23505:12;;;23498:28;;;23542:12;;4153:81:120;;;;;;;;;;;;4121:113;;2185:2060;;976:3275;;;;;;;:::o;3752:352:118:-;3903:22;3927:12;3962:135;:11;4017:10;4048:6;4078:8;3962:31;:135::i;:::-;3955:142;;;;3752:352;;;;;:::o;1037:779:117:-;981:42:115;583:12;:10;:12::i;:::-;-1:-1:-1;;;;;583:28:115;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1;;;;;615:26:115;:10;-1:-1:-1;;;;;615:26:115;;583:58;577:126;;665:27;;-1:-1:-1;;;665:27:115;;;;;;;;;;;577:126;1240:41:117::1;:11;1268:10;1240:16;:41::i;:::-;1308:10:::0;1291:14:::1;1335:429;1355:6;1351:1;:10;1335:429;;;1382:29;1414:10;;1425:1;1414:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1382:45:::0;-1:-1:-1;1441:69:117::1;1469:10;1491:16;;::::0;::::1;1382:45:::0;1491:16:::1;:::i;:::-;1441:11;::::0;:69;:16:::1;:69::i;:::-;-1:-1:-1::0;1363:3:117::1;;1335:429;;;-1:-1:-1::0;1778:31:117::1;::::0;1798:10:::1;::::0;1778:31:::1;::::0;;;::::1;1179:637;1037:779:::0;;:::o;15081:1421:113:-;13275:10:118;13242:18;13263:23;;;:11;:23;;;;;;;;;13314:22;:34;;;;;;-1:-1:-1;;;15246:38:113;-1:-1:-1;;;;;13263:23:118;;;;13314:34;;;;13242:18;13400:30;13263:23;13314:34;13400:9;:30::i;:::-;13358:72;;;;599:12:115::1;981:42:::0;;895:135;599:12:::1;-1:-1:-1::0;;;;;583:28:115::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;15510:27:113::2;276:1:76;15551:10:113;:35:::0;15547:673:::2;;15619:35;15637:6;15645:8;;15619:17;:35::i;:::-;15602:52;;15547:673;;;319:1:76;15675:10:113;:34:::0;15671:549:::2;;15742:34;15759:6;15767:8;;15742:16;:34::i;15671:549::-;362:1:76;15797:10:113;:34:::0;15793:427:::2;;15864:41;15888:6;15896:8;;15864:23;:41::i;15793:427::-;401:1:76;15926:10:113;:30:::0;15922:298:::2;;15989:30;16002:6;16010:8;;15989:12;:30::i;15922:298::-;16040:10:::0;16036:184:::2;;16103:35;16121:6;16129:8;;16103:17;:35::i;16036:184::-;16176:33;::::0;-1:-1:-1;;;16176:33:113;;::::2;::::0;::::2;3492:25:153::0;;;3465:18;;16176:33:113::2;3346:177:153::0;16036:184:113::2;16268:227;16308:10;16341:4;16435:10;16447:6;16455:14;16369:115;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;16369:115:113;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;16369:115:113::2;-1:-1:-1::0;;;16369:115:113::2;::::0;;16268:13:::2;:227::i;:::-;15319:1183;13451:44:118::0;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;16553:1637:113:-;13605:10:118;13572:18;13593:23;;;:11;:23;;;;;;;;;13644:22;:34;;;;;;;16725:6:113;;-1:-1:-1;;;16733:40:113;-1:-1:-1;;;;;13593:23:118;;;;13644:34;;;;13693:20;;;;;;;:41;;;13727:7;-1:-1:-1;;;;;13717:17:118;:6;-1:-1:-1;;;;;13717:17:118;;;13693:41;13689:249;;;13751:19;13772:16;13792:30;13802:10;13814:7;13792:9;:30::i;:::-;13750:72;;;;599:12:115::1;981:42:::0;;895:135;599:12:::1;-1:-1:-1::0;;;;;583:28:115::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;17007:29:113::2;276:1:76;17050:10:113;:35:::0;17046:703:::2;;17120:39;17140:6;17148:10;;17120:19;:39::i;:::-;17101:58;;17046:703;;;319:1:76;17180:10:113;:34:::0;17176:573:::2;;17249:38;17268:6;17276:10;;17249:18;:38::i;17176:573::-;362:1:76;17308:10:113;:34:::0;17304:445:::2;;17377:45;17403:6;17411:10;;17377:25;:45::i;17304:445::-;401:1:76;17443:10:113;:30:::0;17439:310:::2;;17508:34;17523:6;17531:10;;17508:14;:34::i;17439:310::-;17563:10:::0;17559:190:::2;;17628:39;17648:6;17656:10;;17628:19;:39::i;17559:190::-;17705:33;::::0;-1:-1:-1;;;17705:33:113;;::::2;::::0;::::2;3492:25:153::0;;;3465:18;;17705:33:113::2;3346:177:153::0;17559:190:113::2;17949:234;17992:10;18025:4;18121:10;18133:6;18141:16;18053:119;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;18053:119:113;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;18053:119:113::2;-1:-1:-1::0;;;18053:119:113::2;::::0;;17949:16:::2;:234::i;:::-;16808:1382;13851:44:118::0;13862:10;13874:7;13883:6;13891:3;13851:10;:44::i;:::-;13736:170;;13689:249;;;981:42:115;583:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;17007:29:113::2;276:1:76;17050:10:113;:35:::0;17046:703:::2;;17120:39;17140:6;17148:10;;17120:19;:39::i;:::-;17101:58;;17046:703;;;319:1:76;17180:10:113;:34:::0;17176:573:::2;;17249:38;17268:6;17276:10;;17249:18;:38::i;17176:573::-;362:1:76;17308:10:113;:34:::0;17304:445:::2;;17377:45;17403:6;17411:10;;17377:25;:45::i;17304:445::-;401:1:76;17443:10:113;:30:::0;17439:310:::2;;17508:34;17523:6;17531:10;;17508:14;:34::i;17439:310::-;17563:10:::0;17559:190:::2;;17628:39;17648:6;17656:10;;17628:19;:39::i;17559:190::-;17705:33;::::0;-1:-1:-1;;;17705:33:113;;::::2;::::0;::::2;3492:25:153::0;;;3465:18;;17705:33:113::2;3346:177:153::0;17559:190:113::2;17949:234;17992:10;18025:4;18121:10;18133:6;18141:16;18053:119;;;;;;;;;;:::i;13689:249:118:-:0;13562:382;;16553:1637:113;;;;;;:::o;682:712:122:-;758:14;929:11;969:1;965:19;;;1007:26;929:11;-1:-1:-1;;;1007:26:122;:::i;:::-;1003:209;;;1047:4;1035:16;;1003:209;;;1070:27;:8;2789:4:131;1070:27:122;:::i;:::-;1066:146;;;1111:4;1099:16;;1066:146;;;1134:33;:8;-1:-1:-1;;;;;;1134:33:122;:::i;:::-;1130:82;;;1181:4;1169:16;;1130:82;;;-1:-1:-1;1207:5:122;;682:712;-1:-1:-1;;;682:712:122:o;1130:82::-;1227:9;:41;;;;-1:-1:-1;1240:28:122;:8;3369:4:131;1240:28:122;:::i;:::-;1223:164;;;1270:16;;682:712;;;:::o;1223:164::-;1305:9;:37;;;;-1:-1:-1;1318:24:122;:8;-1:-1:-1;;;1318:24:122;:::i;:::-;1301:86;;;1344:16;;682:712;;;:::o;6201:660:113:-;6499:26;4497:34:118;4518:12;:10;:12::i;:::-;4497:20;:34::i;:::-;4492:75;;4554:12;:10;:12::i;:::-;4540:27;;-1:-1:-1;;;4540:27:118;;-1:-1:-1;;;;;287:32:153;;;4540:27:118;;;269:51:153;242:18;;4540:27:118;123:203:153;4492:75:118;13275:10:::1;13242:18;13263:23:::0;;;:11:::1;:23;::::0;;;;;;;;13314:22;:34;;;;;;-1:-1:-1;;;6379:44:113;-1:-1:-1;;;;;13263:23:118;;::::1;::::0;13314:34;;::::1;::::0;13242:18;13400:30:::1;13263:23:::0;13314:34;13400:9:::1;:30::i;:::-;13358:72;;;;6446:12:113::2;:10;:12::i;:::-;319:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;6687:4:113::0;6720:1:::3;6716:12:::0;;::::3;6801:53;6716:12:::0;6687:4;6836:17;;6801:14:::3;:53::i;:::-;6794:60;;;;13440:1:118::2;;13451:44:::1;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;:::-;13232:270;;;;4577:1;6201:660:113::0;;;;;:::o;19200:228::-;19274:13;19313:45;;;;-1:-1:-1;;;;;19313:45:113;981:42:115;19376:45:113;;-1:-1:-1;;;19376:45:113;;-1:-1:-1;;;;;24612:32:153;;;19376:45:113;;;24594:51:153;-1:-1:-1;;;;;24681:32:153;;24661:18;;;24654:60;19376:34:113;;;;;;;24567:18:153;;19376:45:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2731:3419::-;13275:10:118;13242:18;13263:23;;;:11;:23;;;;;;;;;13314:22;:34;;;;;;-1:-1:-1;;;2853:32:113;-1:-1:-1;;;;;13263:23:118;;;;13314:34;;;;13242:18;13400:30;13263:23;13314:34;13400:9;:30::i;:::-;13358:72;;;;599:12:115::1;981:42:::0;;895:135;599:12:::1;-1:-1:-1::0;;;;;583:28:115::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;583:28:115::1;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;615:26:115::1;:10;-1:-1:-1::0;;;;;615:26:115::1;;583:58;577:126;;665:27;;-1:-1:-1::0;;;665:27:115::1;;;;;;;;;;;577:126;3076:4:113::0;3109:1:::2;3105:12:::0;;::::2;3449:10;3474:28;3105:12:::0;2930:17:::2;3474:28;:::i;:::-;3470:2674;;;3563:26;:8:::0;-1:-1:-1;;;3563:26:113::2;:::i;:::-;3559:903;;;930:29:130::0;;909:51;;1062:2;1045:20;;;1103:25;3692:23:113::2;3698:4:::0;1045:20:130;1103:25;3692:5:113::2;:23::i;:::-;3591:139;;3470:2674;;3559:903;3794:27;:8:::0;2789:4:131::2;3794:27:113;:::i;:::-;3790:672;;;3842:14;3858:13:::0;3873:23:::2;;3920:32;:17;;:30;:32::i;:::-;3841:111;;;;;;;;3970:36;3976:4;3982:6;3990:5;3997:8;;3970:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;3970:5:113::2;::::0;-1:-1:-1;;;3970:36:113:i:2;:::-;3823:198;;;;3470:2674;;3790:672;4086:33;:8:::0;-1:-1:-1;;;;;;4086:33:113::2;:::i;:::-;4082:380;;;4139:14;4172:22;4191:2;4139:14:::0;4172:17;;:22:::2;:::i;:::-;4164:31;::::0;::::2;:::i;:::-;4156:40;;4139:57;;4214:23;;4240:17;;4258:2;4240:22;;;;;;;;;:::i;:::-;4214:48;;;;4280:37;4294:4;4300:6;4308:8;;4280:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;4280:13:113::2;::::0;-1:-1:-1;;;4280:37:113:i:2;:::-;4121:211;;;3470:2674;;4082:380;4438:8;4418:29;;-1:-1:-1::0;;;4418:29:113::2;;;;;;;;:::i;3470:2674::-;4784:24;:8:::0;-1:-1:-1;;;4784:24:113::2;:::i;:::-;4780:1364;;;4865:26;:8:::0;-1:-1:-1;;;4865:26:113::2;:::i;:::-;4861:904;;;930:29:130::0;;909:51;;1062:2;1045:20;;;1103:25;4994:26:113::2;5003:4:::0;1045:20:130;1103:25;4994:8:113::2;:26::i;4861:904::-;5095:27;:8:::0;2789:4:131::2;5095:27:113;:::i;:::-;5091:674;;;5143:14;5159:13:::0;5174:23:::2;;5221:32;:17;;:30;:32::i;:::-;5142:111;;;;;;;;5271:39;5280:4;5286:6;5294:5;5301:8;;5271:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;5271:8:113::2;::::0;-1:-1:-1;;;5271:39:113:i:2;5091:674::-;5386:33;:8:::0;-1:-1:-1;;;;;;5386:33:113::2;:::i;:::-;5382:383;;;5439:14;5472:22;5491:2;5439:14:::0;5472:17;;:22:::2;:::i;:::-;5464:31;::::0;::::2;:::i;:::-;5456:40;;5439:57;;5514:23;;5540:17;;5558:2;5540:22;;;;;;;;;:::i;:::-;5514:48;;;;5580:40;5597:4;5603:6;5611:8;;5580:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;5580:16:113::2;::::0;-1:-1:-1;;;5580:40:113:i:2;4780:1364::-;6124:8;6104:29;;-1:-1:-1::0;;;6104:29:113::2;;;;;;;;:::i;4780:1364::-;2920:3230;;;13451:44:118::0;13462:10;13474:7;13483:6;13491:3;13451:10;:44::i;6056:350::-;6206:22;6230:12;6265:134;:10;6319;6350:6;6380:8;6265:30;:134::i;6064:234:117:-;981:42:115;583:12;:10;:12::i;:::-;-1:-1:-1;;;;;583:28:115;;:58;;;;629:12;:10;:12::i;:::-;-1:-1:-1;;;;;615:26:115;:10;-1:-1:-1;;;;;615:26:115;;583:58;577:126;;665:27;;-1:-1:-1;;;665:27:115;;;;;;;;;;;577:126;6241:50:117::1;6260:8;6270:9;;6281;6241:18;:50::i;1400:373:122:-:0;1469:4;276:1:76;1489:12:122;:37;1485:281;;-1:-1:-1;1535:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1485:281::-;319:1:76;1558:12:122;:36;1554:212;;-1:-1:-1;1603:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1554:212::-;362:1:76;1626:12:122;:36;1622:144;;-1:-1:-1;1671:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1622:144::-;401:1:76;1694:12:122;:32;1690:76;;-1:-1:-1;1735:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;-1:-1:-1;1761:5:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;1400:373;;;:::o;4257:150:120:-;4341:58;;;420:66;4341:58;;;25405:25:153;4379:13:120;25446:18:153;;;25439:34;;;;4394:4:120;25489:18:153;;;25482:60;4305:7:120;;25378:18:153;;4341:58:120;;;;;;;;;;;;4331:69;;;;;;4324:76;;4257:150;:::o;1053:312:57:-;-1:-1:-1;;1328:14:57;1324:23;1311:37;1307:2;1303:46;;1053:312::o;3115:392:116:-;3274:20;3310:12;3365:4;-1:-1:-1;;;;;3365:40:116;;3406:6;3414:5;3421:8;3431:20;3365:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3365:87:116;;;;;;;;;;;;:::i;:::-;3332:120;-1:-1:-1;3332:120:116;-1:-1:-1;3332:120:116;3462:38;;3483:17;;-1:-1:-1;;;3483:17:116;;;;;;;;;;;3462:38;3300:207;3115:392;;;;;;:::o;5465:120:131:-;-1:-1:-1;;;;;;5542:40:131;;;;;;;5465:120::o;7830:1080:116:-;7985:19;8020:27;8093:6;8101:8;8050:61;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;8050:61:116;;;;;;;;;;;;;;-1:-1:-1;;;;;8050:61:116;-1:-1:-1;;;8050:61:116;;;8167:72;8050:61;;-1:-1:-1;;;8167:72:116;;8216:4;;8050:61;;8167:72;;;:::i;:::-;;;;-1:-1:-1;;8167:72:116;;;;;;;;;;;;;;;-1:-1:-1;;;;;8167:72:116;-1:-1:-1;;;8167:72:116;;;8502:25;;8167:72;;-1:-1:-1;8167:72:116;;-1:-1:-1;;8425:4:116;8398:5;8366:231;8345:266;8667:4;8649:16;8645:27;8701:4;8695:11;8685:21;;8744:12;8736:6;8732:25;8726:4;8719:39;8800:12;8794:4;8786:6;8771:42;;8843:4;8837:11;8827:67;;8884:6;8878:13;8871:4;8863:6;8859:17;8852:40;1637:247;1752:77;;-1:-1:-1;;;1752:77:116;;1737:12;;-1:-1:-1;;;;;1752:30:116;;;;;:77;;1783:6;;1791:5;;1798:8;;1737:12;;1752:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1737:92;;1844:7;1839:38;;1860:17;;-1:-1:-1;;;1860:17:116;;;;;;;;;;;1839:38;1727:157;1637:247;;;;:::o;3451:229:118:-;3564:16;3610:63;:11;3642:10;3661:9;3610:20;:63::i;5760:225::-;5871:16;5917:61;:10;5948;5967:8;5917:19;:61::i;8607:397::-;8781:4;;8822:39;;;;8833:17;8822:39;:::i;:::-;-1:-1:-1;;;;;;8909:29:118;8872:34;8909:29;;;:16;:29;;;;;;;;8939:10;8909:41;;;;;;;8967:18;-1:-1:-1;;;;;8967:18:118;;;:30;;;;;-1:-1:-1;;8607:397:118;;;;;:::o;16523:355::-;16658:4;;;16717:39;;;;16728:7;16717:39;:::i;:::-;16678:78;;;;16766:12;16781:59;16809:8;16829;16781:15;:59::i;:::-;-1:-1:-1;;;;;16857:14:118;;;;;;;;-1:-1:-1;;;;16523:355:118;;;;;:::o;19453:378:113:-;19622:12;19694:4;19687:12;;19720:4;19713:12;;19739:15;19795:8;19805:7;19778:35;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;19778:35:113;;;;;;;19768:46;;19778:35;19768:46;;;;-1:-1:-1;;;;;;23370:26:153;;;19657:167:113;;;23358:39:153;;;;23426:26;;;;23413:11;;;23406:47;23469:11;;;23462:27;23505:12;;;23498:28;23542:12;;19657:167:113;;;;;;;;;;;;19650:174;;19453:378;;;;;:::o;12237:907::-;12350:22;;;;;12490:31;12500:6;981:42:115;976:3275:120;:::i;12490:31:113:-;12571:24;;;;;;12535:88;;-1:-1:-1;;;12535:88:113;;12388:133;;-1:-1:-1;12388:133:113;;-1:-1:-1;12388:133:113;;-1:-1:-1;12388:133:113;-1:-1:-1;12542:10:113;;12535:35;;:88;;12388:133;;;;12535:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12531:607;;12979:148;13028:4;13062:10;13102;12979:19;:148::i;:::-;12962:165;;12531:607;;;12781:149;12830:5;12865:10;12905;12781:19;:149::i;:::-;12764:166;;12531:607;12378:766;;;;12237:907;;;:::o;1297:738:119:-;1559:10;1549:9;:21;;;;;;;;;;:32;;-1:-1:-1;;;;;;1549:32:119;-1:-1:-1;;;;;1549:32:119;;;;;;;;1686;1682:285;;1734:222;1770:10;1815:8;1849:1;1919:9;1930;;1878:63;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1878:63:119;;;;;;;;;;;;;;-1:-1:-1;;;;;1878:63:119;-1:-1:-1;;;1878:63:119;;;1734:5;:222::i;:::-;1981:47;;-1:-1:-1;;;;;1981:47:119;;;2007:10;;1981:47;;;;;1297:738;;;;:::o;2506:3507:117:-;3072:10;1033:4:42;1060:31;;;:22;;:31;:22;:31;;;2726:27:117;;2780:10;;-1:-1:-1;;;;;1060:31:42;3025:896:117;;3101:41;:11;3129:10;3101:16;:41::i;:::-;3161:9;3156:673;3176:6;3172:1;:10;3156:673;;;3207:29;3239:10;;3250:1;3239:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;3207:45;-1:-1:-1;3374:55:117;3392:16;;;;3207:45;3392:16;:::i;:::-;3410:18;;;;:9;:18;:::i;:::-;3374:17;:55::i;:::-;3357:72;-1:-1:-1;3494:320:117;3542:10;3583:4;276:1:76;3740:16:117;;;;:9;:16;:::i;:::-;3758:14;3619:176;;;;;;;;;;:::i;3494:320::-;-1:-1:-1;3184:3:117;;3156:673;;;;3025:896;;;3849:11;;3845:76;;3883:27;;-1:-1:-1;;;3883:27:117;;3899:10;3883:27;;;269:51:153;242:18;;3883:27:117;123:203:153;3845:76:117;3983:40;:10;4010;3983:15;:40::i;:::-;-1:-1:-1;4043:9:117;4074;4069:614;4089:6;4085:1;:10;4069:614;;;4116:28;4147:9;;4157:1;4147:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4116:43;-1:-1:-1;4273:52:117;4290:15;;;;4116:43;4290:15;:::i;:::-;4307:17;;;;:8;:17;:::i;:::-;4273:16;:52::i;:::-;4256:69;-1:-1:-1;4382:290:117;4426:10;4463:4;319:1:76;4607:15:117;;;;:8;:15;:::i;4382:290::-;-1:-1:-1;4097:3:117;;4069:614;;;-1:-1:-1;4702:9:117;;-1:-1:-1;4733:9:117;4728:625;4748:6;4744:1;:10;4728:625;;;4775:29;4807:9;;4817:1;4807:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4775:44;-1:-1:-1;4933:61:117;4957:16;;;;4775:44;4957:16;:::i;:::-;4975:18;;;;:9;:18;:::i;:::-;4933:23;:61::i;:::-;4916:78;-1:-1:-1;5051:291:117;5095:10;5132:4;362:1:76;5276:16:117;;;;:9;:16;:::i;5051:291::-;-1:-1:-1;4756:3:117;;4728:625;;;-1:-1:-1;5372:5:117;;-1:-1:-1;5399:9:117;5394:566;5414:6;5410:1;:10;5394:566;;;5441:24;5468:5;;5474:1;5468:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5441:35;-1:-1:-1;5590:40:117;5603:11;;;;5441:35;5603:11;:::i;:::-;5616:13;;;;:4;:13;:::i;:::-;5590:12;:40::i;:::-;5573:57;-1:-1:-1;5687:262:117;5731:10;5768:4;401:1:76;5888:11:117;;;;:4;:11;:::i;5687:262::-;-1:-1:-1;5422:3:117;;5394:566;;;-1:-1:-1;5975:31:117;;5995:10;;5975:31;;;;;2716:3297;;2506:3507;;;;;;;;:::o;3410:171:13:-;3510:7;3536:38;3550:6;:23;;;2887:3;2868:22;;2780:117;3587:162;3679:7;-1:-1:-1;;;;;3718:23:13;;;;3039:31;3705:37;2959:118;3083:162;3183:7;3223:14;;;;2887:3;2868:22;3209:29;2780:117;3251:153;3343:7;-1:-1:-1;;;;;3382:14:13;;;;3039:31;3369:28;2959:118;3124:1854:42;3315:22;3339:12;-1:-1:-1;;;;;3371:17:42;;93:3;3371:17;;;;:52;;;3393:30;3402:4;3408:7;3417:5;3393:8;:30::i;:::-;3392:31;3371:52;3367:120;;;3446:30;;-1:-1:-1;;;3446:30:42;;-1:-1:-1;;;;;287:32:153;;3446:30:42;;;269:51:153;242:18;;3446:30:42;123:203:153;3367:120:42;3500:8;3512:1;3500:13;3496:50;;3522:24;;-1:-1:-1;;;3522:24:42;;;;;;;;;;;3496:50;3619:8;-1:-1:-1;;;;;3605:23:42;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3605:23:42;-1:-1:-1;;;;;;3711:19:42;;;3672:18;3711:19;;;;;;;;;;;:28;;;;;;;;;;;3597:31;;-1:-1:-1;3711:28:42;;;-1:-1:-1;3749:197:42;-1:-1:-1;;;;;3756:20:42;;;;;;:40;;-1:-1:-1;;;;;;3780:16:42;;93:3;3780:16;;3756:40;:65;;;;;3813:8;3800:10;:21;3756:65;3749:197;;;3857:4;3837:5;3843:10;3837:17;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3837:24:42;;;:17;;;;;;;;;;:24;;;;3882:18;;;:12;:18;;;;;;;;;;:27;;;;;;;;;;;;;;;;;3923:12;;;;:::i;:::-;;;;3749:197;;;-1:-1:-1;;;;;4671:16:42;;93:3;4671:16;;;;:34;;;4704:1;4691:10;:14;4671:34;4667:93;;;4728:5;4734:14;4747:1;4734:10;:14;:::i;:::-;4728:21;;;;;;;;:::i;:::-;;;;;;;4721:28;;4667:93;4951:10;4944:5;4937:25;4923:49;3124:1854;;;;;;;:::o;673:213::-;93:3;1033:4;1060:22;;;;;;;;;;;-1:-1:-1;;;;;1060:31:42;;;;;;;;;;;;:47;750:77;;796:31;;-1:-1:-1;;;796:31:42;;;;;;;;;;;750:77;93:3;837:12;:22;;;;;;;;;;;-1:-1:-1;;;;;837:31:42;;;;;;;;;;;;:42;;-1:-1:-1;;;;;;837:42:42;;;;;;673:213::o;1442:480::-;-1:-1:-1;;;;;1541:24:42;;;;:48;;-1:-1:-1;;;;;;1569:20:42;;93:3;1569:20;1541:48;1537:119;;;1612:33;;-1:-1:-1;;;1612:33:42;;-1:-1:-1;;;;;287:32:153;;1612:33:42;;;269:51:153;242:18;;1612:33:42;123:203:153;1537:119:42;-1:-1:-1;;;;;1669:22:42;;;139:3;1669:22;;;;;;;;;;;:31;;;;;;;;;;;;:47;1665:124;;1739:39;;-1:-1:-1;;;1739:39:42;;-1:-1:-1;;;;;287:32:153;;1739:39:42;;;269:51:153;242:18;;1739:39:42;123:203:153;1665:124:42;93:3;1832:12;:22;;;;;;;;;;;-1:-1:-1;;;;;1832:31:42;;;;;;;;;;;;;;1798:22;;;;;;;;;;;;:31;;;;;;;;;;:65;;1832:31;;;;-1:-1:-1;;;;;;1798:65:42;;;;;;;1873:31;:42;;;;;;;;1442:480::o;2225:311:118:-;2403:27;2352:9;276:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;2446:62:118::1;:11;2474:10;2496:9:::0;2446:16:::1;:62::i;:::-;2525:4;;2518:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2518:11:118;;2225:311;-1:-1:-1;;;;;;;;;2225:311:118:o;4858:305::-;5032:27;4983:8;319:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;5075:60:118::1;:10;5102;5124:8:::0;5075:15:::1;:60::i;6826:1099::-:0;7023:27;6975:7;362:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;7067:18:118::1;::::0;;7143:45:::1;::::0;;::::1;7154:6:::0;7143:45:::1;:::i;:::-;7066:122:::0;;-1:-1:-1;7066:122:118;-1:-1:-1;7066:122:118;-1:-1:-1;;;;;;;7317:41:118;::::1;-1:-1:-1::0;;;7317:41:118::1;::::0;:88:::1;;-1:-1:-1::0;;;;;;;7362:43:118;::::1;-1:-1:-1::0;;;7362:43:118::1;7317:88;7300:158;;;7423:35;::::0;-1:-1:-1;;;7423:35:118;;-1:-1:-1;;;;;;2509:33:153;;7423:35:118::1;::::0;::::1;2491:52:153::0;2464:18;;7423:35:118::1;2347:202:153::0;7300:158:118::1;7515:27;:8:::0;2789:4:131::1;7515:27:118;:::i;:::-;:58;;;;-1:-1:-1::0;7546:27:118::1;:8:::0;-1:-1:-1;;;7546:27:118::1;:::i;:::-;7511:121;;;7612:8;7596:25;;-1:-1:-1::0;;;7596:25:118::1;;;;;;;;:::i;7511:121::-;-1:-1:-1::0;;;;;;8072:29:118;;8019:4;8072:29;;;:16;:29;;;;;;;;8102:10;8072:41;;;;;;;8130:18;-1:-1:-1;;;;;8130:18:118;:32;7642:83:::1;;7695:30;::::0;-1:-1:-1;;;7695:30:118;;-1:-1:-1;;;;;;2509:33:153;;7695:30:118::1;::::0;::::1;2491:52:153::0;2464:18;;7695:30:118::1;2347:202:153::0;7642:83:118::1;-1:-1:-1::0;;;;;;7773:29:118;;::::1;7736:34;7773:29:::0;;;:16:::1;:29;::::0;;;;;;;7803:10:::1;7773:41:::0;;;;;;;7824:30;;-1:-1:-1;;;;;7864:28:118;::::1;-1:-1:-1::0;;;;;;7824:30:118::1;::::0;;;::::1;-1:-1:-1::0;;;7824:30:118::1;7864:28:::0;;;;-1:-1:-1;;;;;;7864:28:118;;;;;;;::::1;::::0;;7910:8;-1:-1:-1;6826:1099:118;;;;;;;:::o;14196:1306::-;14370:27;14329:4;401:1:76;675:34:119;690:6;698:10;675:14;:34::i;:::-;14414:17:118::1;::::0;;14487:43:::1;::::0;;::::1;14498:4:::0;14487:43:::1;:::i;:::-;14413:117:::0;;-1:-1:-1;14413:117:118;-1:-1:-1;14413:117:118;-1:-1:-1;14540:19:118::1;::::0;14605:8:::1;:27;;;;;;;;:::i;:::-;;:46;;;;-1:-1:-1::0;;;;;;;14636:15:118;::::1;::::0;14605:46:::1;14601:869;;;-1:-1:-1::0;14693:10:118::1;14681:23;::::0;;;:11:::1;:23;::::0;;;;;-1:-1:-1;;;;;14681:23:118::1;14851:25:::0;;14847:104:::1;;14903:33;::::0;-1:-1:-1;;;14903:33:118;;-1:-1:-1;;;;;287:32:153;;14903:33:118::1;::::0;::::1;269:51:153::0;242:18;;14903:33:118::1;123:203:153::0;14847:104:118::1;14976:10;14964:23;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;;;;;14964:30:118::1;-1:-1:-1::0;;;;;14964:30:118;::::1;;::::0;;14601:869:::1;;;15027:12;15015:8;:24;;;;;;;;:::i;:::-;::::0;15011:459:::1;;-1:-1:-1::0;;;;;;;15069:22:118;::::1;;::::0;;;:12:::1;:22;::::0;;;;;;;15092:10:::1;15069:34:::0;;;;;;;;-1:-1:-1;;;;;15069:34:118::1;15250:25:::0;;15246:104:::1;;15302:33;::::0;-1:-1:-1;;;15302:33:118;;-1:-1:-1;;;;;287:32:153;;15302:33:118::1;::::0;::::1;269:51:153::0;242:18;;15302:33:118::1;123:203:153::0;15246:104:118::1;-1:-1:-1::0;;;;;;15363:22:118;::::1;;::::0;;;:12:::1;:22;::::0;;;;;;;15386:10:::1;15363:34:::0;;;;;;;:41;;-1:-1:-1;;;;;;15363:41:118::1;-1:-1:-1::0;;;;;15363:41:118;::::1;;::::0;;15011:459:::1;;;15442:17;;-1:-1:-1::0;;;15442:17:118::1;;;;;;;;;;;15011:459;-1:-1:-1::0;15487:8:118;14196:1306;-1:-1:-1;;;;;;;;14196:1306:118:o;17586:3425::-;17710:28;18187:20;;18171:37;;18255:2;18238:20;;;;18287:25;;18335:15;;;18395:20;18379:37;;18448:20;;;;18500:25;;;18548:15;;;18608:20;18592:37;;18667:20;;;;18725:25;18287;18813;;;18809:52;;18847:14;;-1:-1:-1;;;18847:14:118;;;;;;;;;;;18809:52;18963:9;18958:1873;18978:6;18974:1;:10;18958:1873;;;19005:13;19021:5;;19027:1;19021:8;;;;;;;:::i;:::-;;;;;;;19005:24;;276:1:76;19354:5:118;:30;19350:1471;;19404:38;19422:6;19430:8;;19439:1;19430:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;19404:38::-;;19350:1471;;;319:1:76;19785:5:118;:29;19781:1040;;19834:37;19851:6;19859:8;;19868:1;19859:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;19781:1040::-;362:1:76;20214:5:118;:29;20210:611;;20263:44;20287:6;20295:8;;20304:1;20295:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;20210:611::-;401:1:76;20650:5:118;:25;20646:175;;20695:33;20708:6;20716:8;;20725:1;20716:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;20646:175::-;20774:32;;-1:-1:-1;;;20774:32:118;;-1:-1:-1;;;;;31922:32:153;;20774::118;;;31904:51:153;31971:18;;;31964:34;;;31877:18;;20774:32:118;31730:274:153;20646:175:118;-1:-1:-1;18986:3:118;;18958:1873;;;;20990:14;;20972:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20972:32:118;;17586:3425;-1:-1:-1;;;;;;;;;;;;;;17586:3425:118:o;1890:256:116:-;2010:81;;-1:-1:-1;;;2010:81:116;;1983:12;;-1:-1:-1;;;;;2010:30:116;;;;;:81;;2041:6;;1983:12;;2052:8;;2062:28;;2010:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1983:108;;2106:7;2101:38;;2122:17;;-1:-1:-1;;;2122:17:116;;;;;;;;;;;2878:344:118;3003:27;3046:12;3093:34;;;;3104:4;3093:34;:::i;:::-;3068:59;-1:-1:-1;3068:59:118;-1:-1:-1;3137:78:118;:11;3164:10;3068:59;3203:9;3137:15;:78::i;:::-;3036:186;2878:344;;;;;:::o;5410:::-;5533:29;5578:12;5627:34;;;;5638:4;5627:34;:::i;:::-;5600:61;-1:-1:-1;5600:61:118;-1:-1:-1;5671:76:118;:10;5697;5600:61;5736:8;5671:14;:76::i;8175:426::-;8327:29;8372:18;8434:36;;;;8445:7;8434:36;:::i;:::-;-1:-1:-1;;;;;;8518:29:118;;;8481:34;8518:29;;;:16;:29;;;;;;;;8548:10;8518:41;;;;;;;8569:25;;-1:-1:-1;;;;;;8569:25:118;;;8400:70;8175:426;-1:-1:-1;;;;;8175:426:118:o;15508:596::-;15643:29;15688:17;;15781:43;;;;15792:4;15781:43;:::i;:::-;15740:84;-1:-1:-1;15740:84:118;;-1:-1:-1;15740:84:118;-1:-1:-1;15850:15:118;15838:8;:27;;;;;;;;:::i;:::-;;:46;;;;-1:-1:-1;;;;;;;15869:15:118;;;15838:46;15834:264;;;15919:10;15907:23;;;;:11;:23;;;;;15900:30;;-1:-1:-1;;;;;;15900:30:118;;;15834:264;;;15963:12;15951:8;:24;;;;;;;;:::i;:::-;;15947:151;;-1:-1:-1;;;;;;15998:22:118;;;;;;:12;:22;;;;;;;;16021:10;15998:34;;;;;;;15991:41;;-1:-1:-1;;;;;;15991:41:118;;;15947:151;;21017:3447;21143:30;21624:20;;21608:37;;21692:2;21675:20;;;;21724:25;;21772:15;;;21832:20;21816:37;;21885:20;;;;21937:25;;;21985:15;;;22045:20;22029:37;;22106:20;;;;22166:25;21724;22254;;;22250:52;;22288:14;;-1:-1:-1;;;22288:14:118;;;;;;;;;;;22250:52;22404:9;22399:1881;22419:6;22415:1;:10;22399:1881;;;22446:13;22462:5;;22468:1;22462:8;;;;;;;:::i;:::-;;;;;;;22446:24;;276:1:76;22795:5:118;:30;22791:1479;;22845:40;22865:6;22873:8;;22882:1;22873:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;22845:19;:40::i;:::-;;22791:1479;;;319:1:76;23228:5:118;:29;23224:1046;;23277:39;23296:6;23304:8;;23313:1;23304:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;23277:18;:39::i;23224:1046::-;362:1:76;23659:5:118;:29;23655:615;;23708:46;23734:6;23742:8;;23751:1;23742:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;23708:25;:46::i;23655:615::-;401:1:76;24097:5:118;:25;24093:177;;24142:35;24157:6;24165:8;;24174:1;24165:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;24142:14;:35::i;24093:177::-;-1:-1:-1;22427:3:118;;22399:1881;;4968:267:116;5091:81;;-1:-1:-1;;;5091:81:116;;5064:12;;-1:-1:-1;;;;;5091:30:116;;;;;:81;;5122:6;;5064:12;;5133:8;;5143:28;;5091:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5064:108;;5187:7;5182:46;;5201:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;5226:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;5201:27:116;31877:18:153;5201:27:116;;;;;;;5054:181;4968:267;;;:::o;901:331:119:-;1015:10;985:17;1005:21;;;;;;;;;;;-1:-1:-1;;;;;1005:21:119;1040:31;;1036:190;;1159:56;;-1:-1:-1;;;1159:56:119;;1184:10;1159:56;;;33942:51:153;-1:-1:-1;;;;;34029:32:153;;;34009:18;;;34002:60;34078:18;;;34071:34;;;1159:24:119;;;;;33915:18:153;;1159:56:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:190;975:257;901:331;;:::o;7101:3574:113:-;7260:26;7601:28;:8;3369:4:131;7601:28:113;:::i;:::-;7597:3072;;;7690:26;:8;-1:-1:-1;;;7690:26:113;:::i;:::-;7686:1100;;;930:29:130;;909:51;;1062:2;1045:20;;;1103:25;7833:42:113;7851:10;1045:20:130;1103:25;7833:11:113;:42::i;:::-;7819:56;;7718:172;;7597:3072;;7686:1100;7954:27;:8;2789:4:131;7954:27:113;:::i;:::-;7950:836;;;8002:14;8018:13;8033:23;;8080:32;:17;;:30;:32::i;:::-;8144:14;;;8156:1;8144:14;;;;;;;;;8001:111;;-1:-1:-1;8001:111:113;;-1:-1:-1;8001:111:113;;-1:-1:-1;8001:111:113;-1:-1:-1;8144:14:113;;;;;;;;;;;;;;;;;;;;8130:28;;8193:55;8211:10;8224:6;8232:5;8239:8;;8193:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:11:113;;-1:-1:-1;;;8193:55:113:i;:::-;8176:11;8188:1;8176:14;;;;;;;;:::i;:::-;;;;;;:72;;;;7983:280;;;;7597:3072;;7950:836;8328:33;:8;-1:-1:-1;;;;;;8328:33:113;:::i;:::-;8324:462;;;8381:14;8414:22;8433:2;8381:14;8414:17;;:22;:::i;:::-;8406:31;;;:::i;:::-;8398:40;;;-1:-1:-1;8456:23:113;;8482:22;:17;8500:2;8482:17;;:22;:::i;:::-;8536:14;;;8548:1;8536:14;;;;;;;;;8456:48;;-1:-1:-1;8456:48:113;;-1:-1:-1;8536:14:113;;;;;;;;;;;;;;;;;;;;8522:28;;8585:56;8611:10;8624:6;8632:8;;8585:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8585:19:113;;-1:-1:-1;;;8585:56:113:i;:::-;8568:11;8580:1;8568:14;;;;;;;;:::i;:::-;;;;;;:73;;;;8363:293;;;7597:3072;;8324:462;8762:8;8742:29;;-1:-1:-1;;;8742:29:113;;;;;;;;:::i;7597:3072::-;9108:24;:8;-1:-1:-1;;;9108:24:113;:::i;:::-;9104:1565;;;9189:26;:8;-1:-1:-1;;;9189:26:113;:::i;:::-;9185:1105;;;930:29:130;;909:51;;1062:2;1045:20;;;1103:25;9336:45:113;9357:10;1045:20:130;1103:25;9336:14:113;:45::i;:::-;9318:63;-1:-1:-1;9104:1565:113;;-1:-1:-1;;;9104:1565:113;9185:1105;9456:27;:8;2789:4:131;9456:27:113;:::i;:::-;9452:838;;;9504:14;9520:13;9535:23;;9582:32;:17;;:30;:32::i;:::-;9646:14;;;9658:1;9646:14;;;;;;;;;9503:111;;-1:-1:-1;9503:111:113;;-1:-1:-1;9503:111:113;;-1:-1:-1;9503:111:113;-1:-1:-1;9646:14:113;;;;;;;;;;;;;;;;;;;;9632:28;;9695:58;9716:10;9729:6;9737:5;9744:8;;9695:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9695:14:113;;-1:-1:-1;;;9695:58:113:i;9452:838::-;9829:33;:8;-1:-1:-1;;;;;;9829:33:113;:::i;:::-;9825:465;;;9882:14;9915:22;9934:2;9882:14;9915:17;;:22;:::i;:::-;9907:31;;;:::i;:::-;9899:40;;;-1:-1:-1;9957:23:113;;9983:22;:17;10001:2;9983:17;;:22;:::i;:::-;10037:14;;;10049:1;10037:14;;;;;;;;;9957:48;;-1:-1:-1;9957:48:113;;-1:-1:-1;10037:14:113;;;;;;;;;;;;;;;;;;;;10023:28;;10086:59;10115:10;10128:6;10136:8;;10086:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10086:22:113;;-1:-1:-1;;;10086:59:113:i;9104:1565::-;10649:8;10629:29;;-1:-1:-1;;;10629:29:113;;;;;;;;:::i;1395:236:116:-;1474:150;1508:4;1534;1602:10;;1562:51;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1562:51:116;;;;;;;;;;;;;;-1:-1:-1;;;;;1562:51:116;-1:-1:-1;;;1562:51:116;;;1474:13;:150::i;1332:333:130:-;1435:14;;1466:23;1435:14;1530:23;1550:2;1435:14;1530:17;;:23;:::i;:::-;1522:32;;;:::i;:::-;1514:41;;;-1:-1:-1;1589:24:130;1610:2;1607;1589:17;;:24;:::i;:::-;1581:33;;;:::i;:::-;1573:42;-1:-1:-1;1636:22:130;:17;1654:2;1636:17;;:22;:::i;:::-;1332:333;;;;-1:-1:-1;1625:33:130;-1:-1:-1;;;1332:333:130:o;4453:245:116:-;4535:156;4572:4;4598;4669:10;;4626:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;4626:54:116;;;;;;;;;;;;;;-1:-1:-1;;;;;4626:54:116;-1:-1:-1;;;4626:54:116;;;4535:16;:156::i;4704:258::-;4822:77;;-1:-1:-1;;;4822:77:116;;4807:12;;-1:-1:-1;;;;;4822:30:116;;;;;:77;;4853:6;;4861:5;;4868:8;;4807:12;;4822:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4807:92;;4914:7;4909:46;;4928:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;4953:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;4928:27:116;31877:18:153;4928:27:116;;;;;;;4797:165;4704:258;;;;:::o;2865:253:42:-;3019:4;93:3;-1:-1:-1;;;;;3046:17:42;;;;;;:65;;-1:-1:-1;;;;;;;3067:19:42;;;139:3;3067:19;;;;;;;;;;;:28;;;;;;;;;;;;;:44;;;2865:253::o;16110:407:118:-;16240:12;;16303:8;:27;;;;;;;;:::i;:::-;;:46;;;;-1:-1:-1;;;;;;;16334:15:118;;;16303:46;16299:107;;;-1:-1:-1;16384:10:118;16372:23;;;;:11;:23;;;;;;-1:-1:-1;;;;;16372:23:118;16299:107;16431:12;16419:8;:24;;;;;;;;:::i;:::-;;16415:96;;-1:-1:-1;;;;;;;16466:22:118;;;;;:12;:22;;;;;;;;16489:10;16466:34;;;;;;;;-1:-1:-1;;;;;16466:34:118;;16110:407;-1:-1:-1;16110:407:118:o;2448:248:9:-;2559:7;2683:8;2667:10;2659:19;;:33;;2643:3;2628:10;2620:19;;:26;;2590:9;:17;;2606:1;2590:17;;;2602:1;2590:17;2589:58;;;:104;;2448:248;-1:-1:-1;;;;2448:248:9:o;1928:545:42:-;-1:-1:-1;;;;;2095:24:42;;;;:48;;-1:-1:-1;;;;;;2123:20:42;;93:3;2123:20;2095:48;2091:120;;;2166:34;;-1:-1:-1;;;2166:34:42;;-1:-1:-1;;;;;287:32:153;;2166:34:42;;;269:51:153;242:18;;2166:34:42;123:203:153;2091:120:42;-1:-1:-1;;;;;2224:23:42;;;:12;:23;;;;;;;;;;;:32;;;;;;;;;;;;;:44;;;;2220:115;;2291:33;;-1:-1:-1;;;2291:33:42;;-1:-1:-1;;;;;287:32:153;;2291:33:42;;;269:51:153;242:18;;2291:33:42;123:203:153;2220:115:42;-1:-1:-1;;;;;2379:22:42;;;:12;:22;;;;;;;;;;;:31;;;;;;;;;;;;;;2344:23;;;;;;;;;;;:32;;;;;;;;:66;;2379:31;;;;-1:-1:-1;;;;;;2344:66:42;;;;;;;2420:31;;;;:46;;;;;1928:545::o;2695:414:116:-;2817:23;2891:178;2935:4;2965;3043:10;;2997:57;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2997:57:116;;;;;;;;;;;;;;-1:-1:-1;;;;;2997:57:116;-1:-1:-1;;;2997:57:116;;;2891:19;:178::i;:::-;2867:235;;;;;;;;;;;;:::i;3513:391::-;3657:20;3693:12;3736:4;-1:-1:-1;;;;;3736:40:116;;3790:6;3798:1;3801:8;3811:28;3736:113;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3736:113:116;;;;;;;;;;;;:::i;:::-;3715:134;-1:-1:-1;3715:134:116;-1:-1:-1;3715:134:116;3859:38;;3880:17;;-1:-1:-1;;;3880:17:116;;;;;;;;;;;5785:605;5910:21;5933:23;5972:16;5991:168;6034:4;6060;6137:10;;6088:60;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6088:60:116;;;;;;;;;;;;;;-1:-1:-1;;;;;6088:60:116;-1:-1:-1;;;6088:60:116;;;5991:22;:168::i;:::-;5972:187;;6202:3;6191:34;;;;;;;;;;;;:::i;:::-;6253:14;;6169:56;;-1:-1:-1;6169:56:116;-1:-1:-1;6236:14:116;6277:107;6297:6;6293:1;:10;6277:107;;;6329:7;6337:1;6329:10;;;;;;;;:::i;:::-;;;;;;;6324:49;;6346:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;31986:2;31971:18;;31964:34;;;-1:-1:-1;;;;;;;;;;;6346:27:116;31877:18:153;6346:27:116;;;;;;;6324:49;6305:3;;6277:107;;;;5962:428;;5785:605;;;;;;:::o;6396:403::-;6558:20;6594:12;6649:4;-1:-1:-1;;;;;6649:40:116;;6690:6;6698:5;6705:8;6715:20;6649:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6649:87:116;;;;;;;;;;;;:::i;:::-;6616:120;-1:-1:-1;6616:120:116;-1:-1:-1;6616:120:116;6746:46;;6765:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;6790:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;6765:27:116;31877:18:153;6765:27:116;;;;;;;6584:215;6396:403;;;;;;:::o;6805:::-;6952:20;6988:12;7031:4;-1:-1:-1;;;;;7031:40:116;;7085:6;7093:1;7096:8;7106:28;7031:113;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7031:113:116;;;;;;;;;;;;:::i;:::-;7010:134;-1:-1:-1;7010:134:116;-1:-1:-1;7010:134:116;7155:46;;7174:27;;;-1:-1:-1;;;;;31922:32:153;;31904:51;;7199:1:116;31986:2:153;31971:18;;31964:34;-1:-1:-1;;;;;;;;;;;7174:27:116;31877:18:153;7174:27:116;;;;;;;6978:230;6805:403;;;;;:::o;331:131:153:-;-1:-1:-1;;;;;406:31:153;;396:42;;386:70;;452:1;449;442:12;386:70;331:131;:::o;467:134::-;535:20;;564:31;535:20;564:31;:::i;606:347::-;657:8;667:6;721:3;714:4;706:6;702:17;698:27;688:55;;739:1;736;729:12;688:55;-1:-1:-1;762:20:153;;-1:-1:-1;;;;;794:30:153;;791:50;;;837:1;834;827:12;791:50;874:4;866:6;862:17;850:29;;926:3;919:4;910:6;902;898:19;894:30;891:39;888:59;;;943:1;940;933:12;958:664;1046:6;1054;1062;1070;1123:2;1111:9;1102:7;1098:23;1094:32;1091:52;;;1139:1;1136;1129:12;1091:52;1184:23;;;-1:-1:-1;1283:2:153;1268:18;;1255:32;1296:33;1255:32;1296:33;:::i;:::-;1348:7;-1:-1:-1;1406:2:153;1391:18;;1378:32;-1:-1:-1;;;;;1422:30:153;;1419:50;;;1465:1;1462;1455:12;1419:50;1504:58;1554:7;1545:6;1534:9;1530:22;1504:58;:::i;:::-;958:664;;;;-1:-1:-1;1581:8:153;-1:-1:-1;;;;958:664:153:o;1819:523::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:52;;;1983:1;1980;1973:12;1935:52;2028:23;;;-1:-1:-1;2126:2:153;2111:18;;2098:32;-1:-1:-1;;;;;2142:30:153;;2139:50;;;2185:1;2182;2175:12;2139:50;2224:58;2274:7;2265:6;2254:9;2250:22;2224:58;:::i;:::-;1819:523;;2301:8;;-1:-1:-1;2198:84:153;;-1:-1:-1;;;;1819:523:153:o;2554:168::-;2626:5;2671:3;2662:6;2657:3;2653:16;2649:26;2646:46;;;2688:1;2685;2678:12;2646:46;-1:-1:-1;2710:6:153;2554:168;-1:-1:-1;2554:168:153:o;2727:614::-;2843:6;2851;2859;2912:2;2900:9;2891:7;2887:23;2883:32;2880:52;;;2928:1;2925;2918:12;2880:52;2968:9;2955:23;-1:-1:-1;;;;;2993:6:153;2990:30;2987:50;;;3033:1;3030;3023:12;2987:50;3056:79;3127:7;3118:6;3107:9;3103:22;3056:79;:::i;:::-;3046:89;3204:2;3189:18;;3176:32;;-1:-1:-1;3305:2:153;3290:18;;;3277:32;;2727:614;-1:-1:-1;;;;2727:614:153:o;3528:386::-;3610:8;3620:6;3674:3;3667:4;3659:6;3655:17;3651:27;3641:55;;3692:1;3689;3682:12;3641:55;-1:-1:-1;3715:20:153;;-1:-1:-1;;;;;3747:30:153;;3744:50;;;3790:1;3787;3780:12;3744:50;3827:4;3819:6;3815:17;3803:29;;3887:3;3880:4;3870:6;3867:1;3863:14;3855:6;3851:27;3847:38;3844:47;3841:67;;;3904:1;3901;3894:12;3919:160;3984:5;4029:2;4020:6;4015:3;4011:16;4007:25;4004:45;;;4045:1;4042;4035:12;4084:1893;4444:6;4452;4460;4468;4476;4484;4492;4500;4508;4561:3;4549:9;4540:7;4536:23;4532:33;4529:53;;;4578:1;4575;4568:12;4529:53;4618:9;4605:23;-1:-1:-1;;;;;4643:6:153;4640:30;4637:50;;;4683:1;4680;4673:12;4637:50;4722:89;4803:7;4794:6;4783:9;4779:22;4722:89;:::i;:::-;4830:8;;-1:-1:-1;4696:115:153;-1:-1:-1;;4918:2:153;4903:18;;4890:32;-1:-1:-1;;;;;4934:32:153;;4931:52;;;4979:1;4976;4969:12;4931:52;5018:91;5101:7;5090:8;5079:9;5075:24;5018:91;:::i;:::-;5128:8;;-1:-1:-1;4992:117:153;-1:-1:-1;;5216:2:153;5201:18;;5188:32;-1:-1:-1;;;;;5232:32:153;;5229:52;;;5277:1;5274;5267:12;5229:52;5316:91;5399:7;5388:8;5377:9;5373:24;5316:91;:::i;:::-;5426:8;;-1:-1:-1;5290:117:153;-1:-1:-1;;5514:2:153;5499:18;;5486:32;-1:-1:-1;;;;;5530:32:153;;5527:52;;;5575:1;5572;5565:12;5527:52;5614:91;5697:7;5686:8;5675:9;5671:24;5614:91;:::i;:::-;5724:8;;-1:-1:-1;5588:117:153;-1:-1:-1;;5812:3:153;5797:19;;5784:33;-1:-1:-1;;;;;5829:32:153;;5826:52;;;5874:1;5871;5864:12;5826:52;5897:74;5963:7;5952:8;5941:9;5937:24;5897:74;:::i;:::-;5887:84;;;4084:1893;;;;;;;;;;;:::o;5982:515::-;6089:6;6097;6150:2;6138:9;6129:7;6125:23;6121:32;6118:52;;;6166:1;6163;6156:12;6118:52;6206:9;6193:23;-1:-1:-1;;;;;6231:6:153;6228:30;6225:50;;;6271:1;6268;6261:12;6225:50;6294:79;6365:7;6356:6;6345:9;6341:22;6294:79;:::i;:::-;6284:89;;;6423:2;6412:9;6408:18;6395:32;6436:31;6461:5;6436:31;:::i;:::-;6486:5;6476:15;;;5982:515;;;;;:::o;6502:250::-;6587:1;6597:113;6611:6;6608:1;6605:13;6597:113;;;6687:11;;;6681:18;6668:11;;;6661:39;6633:2;6626:10;6597:113;;;-1:-1:-1;;6744:1:153;6726:16;;6719:27;6502:250::o;6757:270::-;6798:3;6836:5;6830:12;6863:6;6858:3;6851:19;6879:76;6948:6;6941:4;6936:3;6932:14;6925:4;6918:5;6914:16;6879:76;:::i;:::-;7009:2;6988:15;-1:-1:-1;;6984:29:153;6975:39;;;;7016:4;6971:50;;6757:270;-1:-1:-1;;6757:270:153:o;7032:559::-;7277:3;7266:9;7259:22;7240:4;7304:45;7344:3;7333:9;7329:19;7321:6;7304:45;:::i;:::-;7397:14;7389:6;7385:27;7380:2;7369:9;7365:18;7358:55;7461:14;7453:6;7449:27;7444:2;7433:9;7429:18;7422:55;7525:9;7517:6;7513:22;7508:2;7497:9;7493:18;7486:50;7553:32;7578:6;7570;7553:32;:::i;:::-;7545:40;7032:559;-1:-1:-1;;;;;;;7032:559:153:o;7596:367::-;7664:6;7672;7725:2;7713:9;7704:7;7700:23;7696:32;7693:52;;;7741:1;7738;7731:12;7693:52;7780:9;7767:23;7799:31;7824:5;7799:31;:::i;:::-;7849:5;7927:2;7912:18;;;;7899:32;;-1:-1:-1;;;7596:367:153:o;7968:742::-;8186:2;8198:21;;;8268:13;;8171:18;;;8290:22;;;8138:4;;8381;8369:17;;;8343:2;8328:18;;;8138:4;8414:199;8428:6;8425:1;8422:13;8414:199;;;8493:13;;-1:-1:-1;;;;;8489:39:153;8477:52;;8558:4;8586:17;;;;8549:14;;;;8525:1;8443:9;8414:199;;;-1:-1:-1;;;;;;;8671:32:153;;;;8664:4;8649:20;;;;8642:62;;;;-1:-1:-1;8630:3:153;;7968:742;-1:-1:-1;;7968:742:153:o;8715:487::-;8832:6;8840;8893:2;8881:9;8872:7;8868:23;8864:32;8861:52;;;8909:1;8906;8899:12;8861:52;8949:9;8936:23;-1:-1:-1;;;;;8974:6:153;8971:30;8968:50;;;9014:1;9011;9004:12;8968:50;9053:89;9134:7;9125:6;9114:9;9110:22;9053:89;:::i;:::-;9161:8;;9027:115;;-1:-1:-1;8715:487:153;-1:-1:-1;;;;8715:487:153:o;9207:219::-;9356:2;9345:9;9338:21;9319:4;9376:44;9416:2;9405:9;9401:18;9393:6;9376:44;:::i;9431:131::-;-1:-1:-1;;;;;;9505:32:153;;9495:43;;9485:71;;9552:1;9549;9542:12;9567:245;9625:6;9678:2;9666:9;9657:7;9653:23;9649:32;9646:52;;;9694:1;9691;9684:12;9646:52;9733:9;9720:23;9752:30;9776:5;9752:30;:::i;9817:256::-;9906:6;9959:2;9947:9;9938:7;9934:23;9930:32;9927:52;;;9975:1;9972;9965:12;9927:52;-1:-1:-1;10020:23:153;;9817:256;-1:-1:-1;9817:256:153:o;10636:779::-;10796:4;10844:2;10833:9;10829:18;10874:2;10863:9;10856:21;10897:6;10932;10926:13;10963:6;10955;10948:22;11001:2;10990:9;10986:18;10979:25;;11063:2;11053:6;11050:1;11046:14;11035:9;11031:30;11027:39;11013:53;;11101:2;11093:6;11089:15;11122:1;11132:254;11146:6;11143:1;11140:13;11132:254;;;11239:2;11235:7;11223:9;11215:6;11211:22;11207:36;11202:3;11195:49;11267:39;11299:6;11290;11284:13;11267:39;:::i;:::-;11257:49;-1:-1:-1;11341:2:153;11364:12;;;;11329:15;;;;;11168:1;11161:9;11132:254;;;-1:-1:-1;11403:6:153;;10636:779;-1:-1:-1;;;;;;10636:779:153:o;11420:388::-;11488:6;11496;11549:2;11537:9;11528:7;11524:23;11520:32;11517:52;;;11565:1;11562;11555:12;11517:52;11604:9;11591:23;11623:31;11648:5;11623:31;:::i;:::-;11673:5;-1:-1:-1;11730:2:153;11715:18;;11702:32;11743:33;11702:32;11743:33;:::i;11813:156::-;11879:20;;11939:4;11928:16;;11918:27;;11908:55;;11959:1;11956;11949:12;11974:679;12094:6;12102;12110;12118;12171:2;12159:9;12150:7;12146:23;12142:32;12139:52;;;12187:1;12184;12177:12;12139:52;12226:9;12213:23;12245:31;12270:5;12245:31;:::i;:::-;12295:5;-1:-1:-1;12351:2:153;12336:18;;12323:32;-1:-1:-1;;;;;12367:30:153;;12364:50;;;12410:1;12407;12400:12;12364:50;12449:89;12530:7;12521:6;12510:9;12506:22;12449:89;:::i;:::-;12557:8;;-1:-1:-1;12423:115:153;-1:-1:-1;12611:36:153;;-1:-1:-1;12643:2:153;12628:18;;12611:36;:::i;:::-;12601:46;;11974:679;;;;;;;:::o;13071:266::-;13159:6;13154:3;13147:19;13211:6;13204:5;13197:4;13192:3;13188:14;13175:43;-1:-1:-1;13263:1:153;13238:16;;;13256:4;13234:27;;;13227:38;;;;13319:2;13298:15;;;-1:-1:-1;;13294:29:153;13285:39;;;13281:50;;13071:266::o;13342:412::-;13584:1;13580;13575:3;13571:11;13567:19;13559:6;13555:32;13544:9;13537:51;13624:6;13619:2;13608:9;13604:18;13597:34;13667:2;13662;13651:9;13647:18;13640:30;13518:4;13687:61;13744:2;13733:9;13729:18;13721:6;13713;13687:61;:::i;:::-;13679:69;13342:412;-1:-1:-1;;;;;;13342:412:153:o;13759:127::-;13820:10;13815:3;13811:20;13808:1;13801:31;13851:4;13848:1;13841:15;13875:4;13872:1;13865:15;13891:275;13962:2;13956:9;14027:2;14008:13;;-1:-1:-1;;14004:27:153;13992:40;;-1:-1:-1;;;;;14047:34:153;;14083:22;;;14044:62;14041:88;;;14109:18;;:::i;:::-;14145:2;14138:22;13891:275;;-1:-1:-1;13891:275:153:o;14171:186::-;14219:4;-1:-1:-1;;;;;14244:6:153;14241:30;14238:56;;;14274:18;;:::i;:::-;-1:-1:-1;14340:2:153;14319:15;-1:-1:-1;;14315:29:153;14346:4;14311:40;;14171:186::o;14362:461::-;14415:5;14468:3;14461:4;14453:6;14449:17;14445:27;14435:55;;14486:1;14483;14476:12;14435:55;14519:6;14513:13;14550:52;14566:35;14594:6;14566:35;:::i;:::-;14550:52;:::i;:::-;14627:6;14618:7;14611:23;14681:3;14674:4;14665:6;14657;14653:19;14649:30;14646:39;14643:59;;;14698:1;14695;14688:12;14643:59;14711:81;14785:6;14778:4;14769:7;14765:18;14758:4;14750:6;14746:17;14711:81;:::i;14828:335::-;14907:6;14960:2;14948:9;14939:7;14935:23;14931:32;14928:52;;;14976:1;14973;14966:12;14928:52;15009:9;15003:16;-1:-1:-1;;;;;15034:6:153;15031:30;15028:50;;;15074:1;15071;15064:12;15028:50;15097:60;15149:7;15140:6;15129:9;15125:22;15097:60;:::i;15168:360::-;15379:6;15371;15366:3;15353:33;15449:2;15445:15;;;;-1:-1:-1;;15441:53:153;15405:16;;15430:65;;;15519:2;15511:11;;15168:360;-1:-1:-1;15168:360:153:o;15755:184::-;15825:6;15878:2;15866:9;15857:7;15853:23;15849:32;15846:52;;;15894:1;15891;15884:12;15846:52;-1:-1:-1;15917:16:153;;15755:184;-1:-1:-1;15755:184:153:o;16479:331::-;16584:9;16595;16637:8;16625:10;16622:24;16619:44;;;16659:1;16656;16649:12;16619:44;16688:6;16678:8;16675:20;16672:40;;;16708:1;16705;16698:12;16672:40;-1:-1:-1;;16734:23:153;;;16779:25;;;;;-1:-1:-1;16479:331:153:o;16815:374::-;16936:19;;-1:-1:-1;;16973:40:153;;;17033:2;17025:11;;17022:161;;;17145:26;17141:31;17110:26;17106:31;17099:3;17095:2;17091:12;17088:1;17084:20;17080:58;17076:2;17072:67;17068:105;17059:114;;17022:161;;16815:374;;;;:::o;17194:481::-;17431:6;17420:9;17413:25;17474:2;17469;17458:9;17454:18;17447:30;17394:4;17500:44;17540:2;17529:9;17525:18;17517:6;17500:44;:::i;:::-;17592:9;17584:6;17580:22;17575:2;17564:9;17560:18;17553:50;17620:49;17662:6;17654;17646;17620:49;:::i;18103:249::-;18172:6;18225:2;18213:9;18204:7;18200:23;18196:32;18193:52;;;18241:1;18238;18231:12;18193:52;18273:9;18267:16;18292:30;18316:5;18292:30;:::i;18357:500::-;18415:5;18422:6;18482:3;18469:17;18568:2;18564:7;18553:8;18537:14;18533:29;18529:43;18509:18;18505:68;18495:96;;18587:1;18584;18577:12;18495:96;18615:33;;18719:4;18706:18;;;-1:-1:-1;18667:21:153;;-1:-1:-1;;;;;;18736:30:153;;18733:50;;;18779:1;18776;18769:12;18733:50;18826:6;18810:14;18806:27;18799:5;18795:39;18792:59;;;18847:1;18844;18837:12;18862:1866;19095:2;19084:9;19077:21;19107:66;19169:2;19158:9;19154:18;19126:26;19145:6;19126:26;:::i;:::-;-1:-1:-1;;;;;80:31:153;68:44;;14:104;19107:66;19239:4;19227:17;;19214:31;19276:2;19261:18;;19254:33;19058:4;19330:55;19381:2;19369:15;;19231:6;19330:55;:::i;:::-;19422:6;19416:3;19405:9;19401:19;19394:35;19452:74;19521:3;19510:9;19506:19;19492:12;19478;19452:74;:::i;:::-;19438:88;;;19573:55;19624:2;19616:6;19612:15;19604:6;19573:55;:::i;:::-;19669:22;;;-1:-1:-1;;19665:36:153;19659:3;19644:19;;19637:65;19725;19673:6;19767:14;19751;19725:65;:::i;:::-;19860:3;19848:16;;19835:30;19896:3;19881:19;;;19874:36;;;;19980:3;19968:16;;19955:30;20016:3;20001:19;;;19994:36;;;;20088:16;;;20075:30;20136:3;20121:19;;20114:36;19711:79;;-1:-1:-1;20197:56:153;;-1:-1:-1;20236:16:153;;;-1:-1:-1;19852:6:153;20197:56;:::i;:::-;20297:22;;;-1:-1:-1;;20293:36:153;20284:6;20269:22;;20262:68;20353:65;20301:6;20395:14;20379;20353:65;:::i;:::-;20339:79;;;;20465:56;20516:3;20508:6;20504:16;20496:6;20465:56;:::i;:::-;20562:22;;;-1:-1:-1;;20558:36:153;20552:3;20537:19;;20530:65;20612;20566:6;20654:14;20638;20612:65;:::i;:::-;20604:73;;;;;20715:6;20708:4;20697:9;20693:20;20686:36;18862:1866;;;;;:::o;20733:265::-;20810:6;20863:2;20851:9;20842:7;20838:23;20834:32;20831:52;;;20879:1;20876;20869:12;20831:52;20918:9;20905:23;20937:31;20962:5;20937:31;:::i;21003:545::-;21096:4;21102:6;21162:11;21149:25;21256:2;21252:7;21241:8;21225:14;21221:29;21217:43;21197:18;21193:68;21183:96;;21275:1;21272;21265:12;21183:96;21302:33;;21354:20;;;-1:-1:-1;;;;;;21386:30:153;;21383:50;;;21429:1;21426;21419:12;21383:50;21462:4;21450:17;;-1:-1:-1;21513:1:153;21509:14;;;21493;21489:35;21479:46;;21476:66;;;21538:1;21535;21528:12;21553:182;21610:6;21663:2;21651:9;21642:7;21638:23;21634:32;21631:52;;;21679:1;21676;21669:12;21631:52;21702:27;21719:9;21702:27;:::i;21740:521::-;21817:4;21823:6;21883:11;21870:25;21977:2;21973:7;21962:8;21946:14;21942:29;21938:43;21918:18;21914:68;21904:96;;21996:1;21993;21986:12;21904:96;22023:33;;22075:20;;;-1:-1:-1;;;;;;22107:30:153;;22104:50;;;22150:1;22147;22140:12;22104:50;22183:4;22171:17;;-1:-1:-1;22214:14:153;22210:27;;;22200:38;;22197:58;;;22251:1;22248;22241:12;22266:350;22386:19;;-1:-1:-1;;;;;;22423:33:153;;;22476:1;22468:10;;22465:145;;;-1:-1:-1;;;;;;22537:1:153;22533:11;;;;22530:1;22526:19;22522:50;;;22514:59;22510:90;;;;22266:350;-1:-1:-1;;22266:350:153:o;22873:271::-;23056:6;23048;23043:3;23030:33;23012:3;23082:16;;23107:13;;;23082:16;22873:271;-1:-1:-1;22873:271:153:o;23565:127::-;23626:10;23621:3;23617:20;23614:1;23607:31;23657:4;23654:1;23647:15;23681:4;23678:1;23671:15;23697:328;23794:4;23852:11;23839:25;23946:2;23942:7;23931:8;23915:14;23911:29;23907:43;23887:18;23883:68;23873:96;;23965:1;23962;23955:12;23873:96;23986:33;;;;;23697:328;-1:-1:-1;;23697:328:153:o;24030:385::-;24215:25;;;-1:-1:-1;;;;;24276:32:153;;24271:2;24256:18;;24249:60;24345:2;24340;24325:18;;24318:30;;;-1:-1:-1;;24365:44:153;;24390:18;;24382:6;24365:44;:::i;:::-;24357:52;24030:385;-1:-1:-1;;;;;24030:385:153:o;24725:226::-;-1:-1:-1;;;;;;24918:26:153;;;;24900:45;;24888:2;24873:18;;24725:226::o;25553:127::-;25614:10;25609:3;25605:20;25602:1;25595:31;25645:4;25642:1;25635:15;25669:4;25666:1;25659:15;25685:237;25766:1;25759:5;25756:12;25746:143;;25811:10;25806:3;25802:20;25799:1;25792:31;25846:4;25843:1;25836:15;25874:4;25871:1;25864:15;25746:143;25898:18;;25685:237::o;25927:490::-;26200:1;26196;26191:3;26187:11;26183:19;26175:6;26171:32;26160:9;26153:51;26240:6;26235:2;26224:9;26220:18;26213:34;26283:3;26278:2;26267:9;26263:18;26256:31;26134:4;26304:45;26344:3;26333:9;26329:19;26321:6;26304:45;:::i;:::-;26296:53;;26358;26407:2;26396:9;26392:18;26384:6;26358:53;:::i;26422:164::-;26498:13;;26547;;26540:21;26530:32;;26520:60;;26576:1;26573;26566:12;26591:414;26676:6;26684;26737:2;26725:9;26716:7;26712:23;26708:32;26705:52;;;26753:1;26750;26743:12;26705:52;26776:37;26803:9;26776:37;:::i;:::-;26766:47;;26857:2;26846:9;26842:18;26836:25;-1:-1:-1;;;;;26876:6:153;26873:30;26870:50;;;26916:1;26913;26906:12;26870:50;26939:60;26991:7;26982:6;26971:9;26967:22;26939:60;:::i;:::-;26929:70;;;26591:414;;;;;:::o;27010:314::-;-1:-1:-1;;;;;27185:32:153;;27167:51;;27254:2;27249;27234:18;;27227:30;;;-1:-1:-1;;27274:44:153;;27299:18;;27291:6;27274:44;:::i;27329:202::-;27396:6;27449:2;27437:9;27428:7;27424:23;27420:32;27417:52;;;27465:1;27462;27455:12;27417:52;27488:37;27515:9;27488:37;:::i;27536:149::-;27610:20;;27659:1;27649:12;;27639:40;;27675:1;27672;27665:12;27690:339;27771:6;27779;27832:2;27820:9;27811:7;27807:23;27803:32;27800:52;;;27848:1;27845;27838:12;27800:52;27871:35;27896:9;27871:35;:::i;:::-;27861:45;;27956:2;27945:9;27941:18;27928:32;27969:30;27993:5;27969:30;:::i;28034:359::-;28221:6;28216:3;28209:19;28191:3;28257:6;28251:13;28273:73;28339:6;28334:2;28329:3;28325:12;28320:2;28312:6;28308:15;28273:73;:::i;:::-;28366:16;;;;28384:2;28362:25;;28034:359;-1:-1:-1;;;28034:359:153:o;28398:448::-;28619:6;28608:9;28601:25;28662:2;28657;28646:9;28642:18;28635:30;28582:4;28688:44;28728:2;28717:9;28713:18;28705:6;28688:44;:::i;:::-;28780:9;28772:6;28768:22;28763:2;28752:9;28748:18;28741:50;28808:32;28833:6;28825;28808:32;:::i;28851:762::-;29117:4;29105:17;;29087:36;;29075:2;29154;29139:18;;29132:30;;;29060:18;;29197:22;;;29027:4;29276:6;29250:2;29235:18;;29027:4;29310:277;29324:6;29321:1;29318:13;29310:277;;;29399:6;29386:20;29419:31;29444:5;29419:31;:::i;:::-;-1:-1:-1;;;;;29475:31:153;29463:44;;29536:2;29562:15;;;;29527:12;;;;29503:1;29339:9;29310:277;;;-1:-1:-1;29604:3:153;28851:762;-1:-1:-1;;;;;;28851:762:153:o;29618:127::-;29679:10;29674:3;29670:20;29667:1;29660:31;29710:4;29707:1;29700:15;29734:4;29731:1;29724:15;29750:135;29789:3;29810:17;;;29807:43;;29830:18;;:::i;:::-;-1:-1:-1;29877:1:153;29866:13;;29750:135::o;29890:128::-;29957:9;;;29978:11;;;29975:37;;;29992:18;;:::i;30023:486::-;30065:5;30118:3;30111:4;30103:6;30099:17;30095:27;30085:55;;30136:1;30133;30126:12;30085:55;30176:6;30163:20;30207:52;30223:35;30251:6;30223:35;:::i;30207:52::-;30284:6;30275:7;30268:23;30338:3;30331:4;30322:6;30314;30310:19;30306:30;30303:39;30300:59;;;30355:1;30352;30345:12;30300:59;30420:6;30413:4;30405:6;30401:17;30394:4;30385:7;30381:18;30368:59;30476:1;30447:20;;;30469:4;30443:31;30436:42;;;;30451:7;30023:486;-1:-1:-1;;;30023:486:153:o;30514:659::-;30629:6;30637;30645;30698:2;30686:9;30677:7;30673:23;30669:32;30666:52;;;30714:1;30711;30704:12;30666:52;30753:9;30740:23;30772:30;30796:5;30772:30;:::i;:::-;30821:5;-1:-1:-1;30878:2:153;30863:18;;30850:32;-1:-1:-1;;;;;;30913:27:153;;30901:40;;30891:68;;30955:1;30952;30945:12;30891:68;30978:7;-1:-1:-1;31036:2:153;31021:18;;31008:32;-1:-1:-1;;;;;31052:30:153;;31049:50;;;31095:1;31092;31085:12;31049:50;31118:49;31159:7;31150:6;31139:9;31135:22;31118:49;:::i;:::-;31108:59;;;30514:659;;;;;:::o;31178:547::-;31277:6;31285;31293;31346:2;31334:9;31325:7;31321:23;31317:32;31314:52;;;31362:1;31359;31352:12;31314:52;31385:35;31410:9;31385:35;:::i;:::-;31375:45;;31470:2;31459:9;31455:18;31442:32;31483:30;31507:5;31483:30;:::i;32512:463::-;32597:6;32605;32658:2;32646:9;32637:7;32633:23;32629:32;32626:52;;;32674:1;32671;32664:12;32626:52;32713:9;32700:23;32732:31;32757:5;32732:31;:::i;:::-;32782:5;-1:-1:-1;32838:2:153;32823:18;;32810:32;-1:-1:-1;;;;;32854:30:153;;32851:50;;;32897:1;32894;32887:12;32851:50;32920:49;32961:7;32952:6;32941:9;32937:22;32920:49;:::i;32980:453::-;33056:6;33064;33117:2;33105:9;33096:7;33092:23;33088:32;33085:52;;;33133:1;33130;33123:12;33085:52;33172:9;33159:23;33191:30;33215:5;33191:30;:::i;34116:1484::-;34374:2;34386:21;;;34359:18;;34442:22;;;-1:-1:-1;34495:2:153;34544:1;34540:14;;;34525:30;;34521:39;;;34480:18;;34583:6;-1:-1:-1;;;34635:14:153;34631:27;;;34627:41;34677:894;34691:6;34688:1;34685:13;34677:894;;;34756:22;;;-1:-1:-1;;34752:36:153;34740:49;;34828:20;;34871:27;;;34861:55;;34912:1;34909;34902:12;34861:55;34942:31;;35001:19;;35033:33;35001:19;35033:33;:::i;:::-;-1:-1:-1;;;;;35094:33:153;35079:49;;35205:2;35194:14;;;35181:28;35229:15;;;35222:32;35301:53;35350:2;35339:14;;35198:5;35301:53;:::i;:::-;35267:87;;35391:4;35386:2;35378:6;35374:15;35367:29;35419:72;35485:4;35477:6;35473:17;35459:12;35445;35419:72;:::i;:::-;35409:82;;;;35526:2;35518:6;35514:15;35504:25;;35558:2;35553:3;35549:12;35542:19;;34713:1;34710;34706:9;34701:14;;34677:894;;;-1:-1:-1;35588:6:153;;34116:1484;-1:-1:-1;;;;;;;34116:1484:153:o;35605:255::-;35725:19;;35764:2;35756:11;;35753:101;;;-1:-1:-1;;35825:2:153;35821:12;;;35818:1;35814:20;35810:33;35799:45;35605:255;;;;:::o;35865:181::-;35923:4;-1:-1:-1;;;;;35948:6:153;35945:30;35942:56;;;35978:18;;:::i;:::-;-1:-1:-1;36023:1:153;36019:14;36035:4;36015:25;;35865:181::o;36051:831::-;36114:5;36167:3;36160:4;36152:6;36148:17;36144:27;36134:55;;36185:1;36182;36175:12;36134:55;36218:6;36212:13;36245:62;36261:45;36299:6;36261:45;:::i;36245:62::-;36331:3;36355:6;36350:3;36343:19;36387:4;36382:3;36378:14;36371:21;;36448:4;36438:6;36435:1;36431:14;36423:6;36419:27;36415:38;36401:52;;36476:3;36468:6;36465:15;36462:35;;;36493:1;36490;36483:12;36462:35;36529:4;36521:6;36517:17;36543:308;36559:6;36554:3;36551:15;36543:308;;;36640:3;36634:10;-1:-1:-1;;;;;36663:11:153;36660:35;36657:55;;;36708:1;36705;36698:12;36657:55;36737:69;36802:3;36795:4;36781:11;36773:6;36769:24;36765:35;36737:69;:::i;:::-;36725:82;;-1:-1:-1;36836:4:153;36827:14;;;;36576;36543:308;;;-1:-1:-1;36869:7:153;36051:831;-1:-1:-1;;;;;36051:831:153:o;36887:370::-;36991:6;37044:2;37032:9;37023:7;37019:23;37015:32;37012:52;;;37060:1;37057;37050:12;37012:52;37093:9;37087:16;-1:-1:-1;;;;;37118:6:153;37115:30;37112:50;;;37158:1;37155;37148:12;37112:50;37181:70;37243:7;37234:6;37223:9;37219:22;37181:70;:::i;37262:1157::-;37397:6;37405;37458:2;37446:9;37437:7;37433:23;37429:32;37426:52;;;37474:1;37471;37464:12;37426:52;37507:9;37501:16;-1:-1:-1;;;;;37532:6:153;37529:30;37526:50;;;37572:1;37569;37562:12;37526:50;37595:22;;37648:4;37640:13;;37636:27;-1:-1:-1;37626:55:153;;37677:1;37674;37667:12;37626:55;37710:2;37704:9;37733:62;37749:45;37787:6;37749:45;:::i;37733:62::-;37817:3;37841:6;37836:3;37829:19;37873:4;37868:3;37864:14;37857:21;;37930:4;37920:6;37917:1;37913:14;37909:2;37905:23;37901:34;37887:48;;37958:7;37950:6;37947:19;37944:39;;;37979:1;37976;37969:12;37944:39;38011:4;38007:2;38003:13;37992:24;;38025:160;38041:6;38036:3;38033:15;38025:160;;;38109:31;38136:3;38109:31;:::i;:::-;38097:44;;38170:4;38058:14;;;;38161;;;;38025:160;;;38204:5;38194:15;;;;;;38255:4;38244:9;38240:20;38234:27;-1:-1:-1;;;;;38276:8:153;38273:32;38270:52;;;38318:1;38315;38308:12;38270:52;38341:72;38405:7;38394:8;38383:9;38379:24;38341:72;:::i", + "linkReferences": {}, + "immutableReferences": { + "67808": [ + { "start": 4643, "length": 32 }, + { "start": 5147, "length": 32 }, + { "start": 5500, "length": 32 }, + { "start": 7621, "length": 32 }, + { "start": 8726, "length": 32 }, + { "start": 8944, "length": 32 }, + { "start": 9095, "length": 32 }, + { "start": 9246, "length": 32 }, + { "start": 13690, "length": 32 }, + { "start": 13874, "length": 32 }, + { "start": 14682, "length": 32 }, + { "start": 14970, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "domainSeparator()": "f698da25", + "entryPoint()": "b0d691fe", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "getActiveHook()": "0a664dba", + "getActiveHook(bytes4)": "b875d5d8", + "getExecutorsPaginated(address,uint256)": "ea5f61d0", + "getNonce(address,address)": "d828435d", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4", + "getValidatorsPaginated(address,uint256)": "5faac46b", + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": "540fb4f9", + "initializeAccountWithValidators((address,bytes)[])": "79aad60e", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "setRegistry(address,address[],uint8)": "eab77e17", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountAccessUnauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"FallbackInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currentHook\",\"type\":\"address\"}],\"name\":\"HookAlreadyInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"InvalidCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"InvalidFallbackHandler\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHookType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"}],\"name\":\"InvalidInitData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"InvalidModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"InvalidModuleType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedList_AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"entry\",\"type\":\"address\"}],\"name\":\"LinkedList_EntryAlreadyInList\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"entry\",\"type\":\"address\"}],\"name\":\"LinkedList_InvalidEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkedList_InvalidPage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"NoFallbackHandler\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"ERC7484RegistryConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"}],\"name\":\"Safe7579Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ISafe\",\"name\":\"safe\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numberInBatch\",\"type\":\"uint256\"}],\"name\":\"TryExecutionFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract ISafe\",\"name\":\"safe\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"}],\"name\":\"TryExecutionsFailed\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entryPoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnDatas\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getExecutorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"internalType\":\"struct RegistryInit\",\"name\":\"registryInit\",\"type\":\"tuple\"}],\"name\":\"initializeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"initializeAccountWithValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"supported\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validSignature\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth, Konrad Kopp (@kopy-kat)\",\"details\":\"This contract is a Safe account implementation that supports ERC7579 operations. In order to facilitate full ERC7579 compliance, the contract implements the IERC7579Account interface. This contract is an implementation of a Safe account supporting ERC7579 operations and complying with the IERC7579Account interface. It serves as a Safe FallbackHandler and module for Safe accounts, incorporating complex hacks to ensure ERC7579 compliance and requiring interactions and event emissions to be done via the SafeProxy as msg.sender using Safe's \\\"executeTransactionFromModule\\\" features.\",\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"getNonce(address,address)\":{\"params\":{\"safe\":\"address of safe account\",\"validator\":\"ERC7579 validator to encode\"}},\"getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)\":{\"details\":\"Decodes an ERC-4337 user operation into a Safe operation.\",\"params\":{\"userOp\":\"The ERC-4337 user operation.\"},\"returns\":{\"operationData\":\"Encoded EIP-712 Safe operation data bytes used for signature verification.\",\"signatures\":\"The Safe owner signatures extracted from the user operation.\",\"validAfter\":\"The timestamp the user operation is valid from.\",\"validUntil\":\"The timestamp the user operation is valid until.\"}},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"params\":{\"executors\":\"executor modules and initData\",\"fallbacks\":\"fallback modules and initData\",\"hooks\":\"hook module and initData\",\"registryInit\":\"(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed\",\"validators\":\"validator modules and initData\"}},\"initializeAccountWithValidators((address,bytes)[])\":{\"details\":\"it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad\"},\"installModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"data\":\"abi.encodePacked(address validationModule, bytes signatures)\",\"hash\":\"message hash of ERC1271 request\"}},\"setRegistry(address,address[],uint8)\":{\"params\":{\"attesters\":\"list of attesters\",\"registry\":\"IERC7484 registry\",\"threshold\":\"number of attesters required\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers\"}},\"title\":\"ERC7579 Adapter for Safe accounts. creates full ERC7579 compliance to Safe accounts\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getActiveHook()\":{\"notice\":\"Get the current active global hook\"},\"getActiveHook(bytes4)\":{\"notice\":\"Get the current active selector hook\"},\"getExecutorsPaginated(address,uint256)\":{\"notice\":\"Get paginated list of installed executors\"},\"getNonce(address,address)\":{\"notice\":\"Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator\"},\"getValidatorsPaginated(address,uint256)\":{\"notice\":\"Get paginated list of installed validators\"},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"notice\":\"This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty\"},\"initializeAccountWithValidators((address,bytes)[])\":{\"notice\":\"This function is intended to be called by Launchpad.validateUserOp()\"},\"installModule(uint256,address,bytes)\":{\"notice\":\"Installs a 7579 Module of a certain type on the smart account\"},\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function\"},\"setRegistry(address,address[],uint8)\":{\"notice\":\"Configure the Safe7579 with a IERC7484 registry\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"uninstallModule(uint256,address,bytes)\":{\"notice\":\"Uninstalls a Module of a certain type on the smart account.\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"ERC4337 v0.7 validation function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Safe7579.sol\":\"Safe7579\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e\",\"dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc\"]},\"node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol\":{\"keccak256\":\"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc\",\"dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"keccak256\":\"0xf100d6fcc0c3b450b13e979b6a42c628c292a1bc340eccc2e7796b80e3975588\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://192938b5b27234d35c8098a319e879363c79f750eea4d0e409dc889a8ce5b155\",\"dweb:/ipfs/QmURpaJFPqEtkKP2ngBsgZhAGN8wAWh5XQpYmCkiz4Urz5\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0x1972a5fcb3a808b58c85af5741949ef6af11ab0debd3ae8c708171ae1ae0d0c4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://baa9837ae73b9e2362a47d42d081d7c0f3d8e878e5edb381117d94a6968949c9\",\"dweb:/ipfs/QmUmo6FUE7fv5z1WzW1YFjxp8PqaeN2JrEee9au59w3Xhe\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"keccak256\":\"0xd575af0f6ebbd5f0b2933307d44cd7b4e03a69f4b817a67db5409bd3c89aeecb\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3b1e2dea9b05cfba9d13339ed16d96457dc861013cc4f3f35b71a80f82448db3\",\"dweb:/ipfs/QmVaGy5uGDMSiU2SzyokTjoHFyb39VVG5wtaM9KTnHyZSk\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xbe5ca9e7f254d031687419e7b96ef48c9c63e9398bbe992dc72ffc6dc14e0a04\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1fffec71c38627a26fabb423350148009579f092623fb02b471a12d973763a00\",\"dweb:/ipfs/QmRBi31QEYXHj3x1AnQ2jKa2eziZH1b9av396P3b4dw6bj\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"node_modules/@rhinestone/sentinellist/src/SentinelList.sol\":{\"keccak256\":\"0x0fdb07d60acf6c8272517b2cf9a7ce36cef7dabd3acfc61e7424662818044da2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b67e9af0f8efcf0882e856b33ad8363024e9ed9b048795dedffcba9cd27f6062\",\"dweb:/ipfs/Qme6oX3V1JCyTSZNEHuR5nByNxJUhDDuriJkNecVyWGVGr\"]},\"node_modules/@rhinestone/sentinellist/src/SentinelList4337.sol\":{\"keccak256\":\"0x173a41622f0525822de4252e768907b83d5b43b6a939a6448082c5cfcdd76b33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61849503c2eb3bb4efd476860ed78995d6f2b6b2880d6c56178ca8eb6f6ac326\",\"dweb:/ipfs/QmSfCu28jDnBDFVbDtj71isCJ6qGzZVc9cPUKjxffRdiCL\"]},\"node_modules/@safe-global/safe-contracts/contracts/handler/HandlerContext.sol\":{\"keccak256\":\"0xce6da4c47f8691a4fcf07d20266b1a23ea757e49eedbfcf929f535f3f6e8072d\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://b57666c08d90b0b56344813511789a6d21b66044f049146d802f8db0e28899fc\",\"dweb:/ipfs/QmYWHsFYNbibbAGfNNQrWon9KzNHfgu5E6B3bDteLKDEmL\"]},\"node_modules/erc7579/src/core/AccountBase.sol\":{\"keccak256\":\"0x11805c609cfd00250d52f440983ea54daaddc2d2bd0da83676ffef6192fecb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://93fdd8d0e9da56705838ff9deb8a9130e18296986ff8f59d73ba3f8b0b00c2c5\",\"dweb:/ipfs/QmZwGFNjQjsPxAwrVuobhLDvSkLf8eduSQc35R69XFPcvf\"]},\"node_modules/erc7579/src/core/Receiver.sol\":{\"keccak256\":\"0x42d41b30a6582d95d737fd75122b621a8af1ec3123782d91a29385b67612b9e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bfb32e6d912477279bf3105eeb7afaf4bfb6526541ef9944428a3d5b9133c23f\",\"dweb:/ipfs/QmUc5nZW5NkC2prAUuRbFBdA2vSRwUBHKXD4evb5yiHSKf\"]},\"node_modules/erc7579/src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5\",\"dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b\",\"dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3\"]},\"src/ISafe7579.sol\":{\"keccak256\":\"0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98\",\"dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9\"]},\"src/Safe7579.sol\":{\"keccak256\":\"0xfe8ee150f3a01d2d43659e8bcc5f82b0fed942573b16d89ed52aed4614ae96bb\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://c2977b34b16b03eeb1c23d8342b6268a6377285ae1510f0f9d4028146953fdc2\",\"dweb:/ipfs/Qmac9iNijFGqeaRGcbBTZAmzNCJuRqnw3SYfcooaVj9BbQ\"]},\"src/core/AccessControl.sol\":{\"keccak256\":\"0x65292c830de10b53a1a7cb37d65134b3f820308b22932341c2ce3cf425cf39a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1726e810a97e26707aa500d10386935b70f8a2c2791e799110f9543bd30c8bdd\",\"dweb:/ipfs/QmZo8mqWdaWnJEoJsSNHUxHvf62eXCzQkexGELVKP33WLY\"]},\"src/core/ExecutionHelper.sol\":{\"keccak256\":\"0x2efc3bc6427ac8c1ac78c449606ffb7aeee00db4c93170019046d7c90ca40b00\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bec5af879e26b73e1f6654d95b89d3a79669bf89daa2ef560b8ac18c3af7329a\",\"dweb:/ipfs/Qmd675PqtXn5dGrYBLzLGDtZG2xxH6RPkuR4DngRRWkQAg\"]},\"src/core/Initializer.sol\":{\"keccak256\":\"0xe9db50095c600259f0e013d5fd81c9e6c1f244a0bf59eb0dee784bf8e8bb9cbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45ed85640b0cd4d874bd9d732f9925ac64caaa162174d68061a58af4052ace3f\",\"dweb:/ipfs/QmQAevyNMb28mfu2aPQzbuXT1MfSzXWLDX1CRXdWMnLfTP\"]},\"src/core/ModuleManager.sol\":{\"keccak256\":\"0x42d3a02ca4321a708f43731caf2920312a0784e0ef99831f6869a8b704bdac0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://251342f930d887d9845e0b5e24eefd97ff141e4d3729c578d7550b1486d54499\",\"dweb:/ipfs/QmQzD4wLAAVsLZveHtPm4Yn8f6Zt4BhJnyDN21sdx1qG93\"]},\"src/core/RegistryAdapter.sol\":{\"keccak256\":\"0xa791b4946887e489f929f74e3b6028aada1d1e0c44fd9febad12067768a96f13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6be2cfa7cd054d1580ccd424f7c0c73fd176eada44bc16c9688d3ad0c4889a64\",\"dweb:/ipfs/QmaAcy7LnYXruBesFpgm1tE3pBZcHWMmR6zsYfkZcGKS2K\"]},\"src/core/SafeOp.sol\":{\"keccak256\":\"0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04\",\"dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ\"]},\"src/core/SetupDCUtil.sol\":{\"keccak256\":\"0x8adecef3f28fe53b297dbe65dda65379536b833795910960a2c232e0f574326b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10dee7abb225ad918b052b38d5edae3e2e9205b330782968a0345cc7b1979500\",\"dweb:/ipfs/QmakXnYAoPQqAqfVtFUUEGB8pa2QbaKL2kngg8DBXbEj1v\"]},\"src/core/SupportViewer.sol\":{\"keccak256\":\"0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd\",\"dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW\"]},\"src/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb393da93ddb9aca17c3a952bd0c667f190cbf8e0abc2b63c075951469deaa21a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://14f56c33dfb8e00c13da56987d1a4256c46984fde1a8bafed31617fe98bffea3\",\"dweb:/ipfs/QmQUZoro4bYJjEJuw2nV3KL8sT6t6qZHupCD8HkjC54XDU\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c\",\"dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/interfaces/ISafe.sol\":{\"keccak256\":\"0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457\",\"dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]},\"src/lib/ExecutionLib.sol\":{\"keccak256\":\"0x5852404ef72dbe607a5402af160494067e7d9e6bf1fbf9460ff309e53b4db399\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f78188bf12cec49056da5dcfd33628b4ce76026a108d227b0c03b87f650dbce\",\"dweb:/ipfs/QmaP3N8RuMYJD2wqfRhCMvGcnVzamT8RSbBNj2pYgeCThi\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { "inputs": [], "type": "error", "name": "AccountAccessUnauthorized" }, + { "inputs": [], "type": "error", "name": "ExecutionFailed" }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "FallbackInstalled" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "currentHook", + "type": "address" + } + ], + "type": "error", + "name": "HookAlreadyInstalled" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "InvalidCallType" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "InvalidFallbackHandler" + }, + { "inputs": [], "type": "error", "name": "InvalidHookType" }, + { + "inputs": [ + { "internalType": "address", "name": "safe", "type": "address" } + ], + "type": "error", + "name": "InvalidInitData" + }, + { "inputs": [], "type": "error", "name": "InvalidInput" }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "InvalidModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + } + ], + "type": "error", + "name": "InvalidModuleType" + }, + { + "inputs": [], + "type": "error", + "name": "LinkedList_AlreadyInitialized" + }, + { + "inputs": [ + { "internalType": "address", "name": "entry", "type": "address" } + ], + "type": "error", + "name": "LinkedList_EntryAlreadyInList" + }, + { + "inputs": [ + { "internalType": "address", "name": "entry", "type": "address" } + ], + "type": "error", + "name": "LinkedList_InvalidEntry" + }, + { "inputs": [], "type": "error", "name": "LinkedList_InvalidPage" }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "NoFallbackHandler" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address", + "indexed": true + }, + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "ERC7484RegistryConfigured", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "safe", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Safe7579Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ISafe", + "name": "safe", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "numberInBatch", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "TryExecutionFailed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ISafe", + "name": "safe", + "type": "address", + "indexed": false + }, + { + "internalType": "bool[]", + "name": "success", + "type": "bool[]", + "indexed": false + } + ], + "type": "event", + "name": "TryExecutionsFailed", + "anonymous": false + }, + { "inputs": [], "stateMutability": "payable", "type": "fallback" }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "entryPoint", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnDatas", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "selector", "type": "bytes4" } + ], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getExecutorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "safe", "type": "address" }, + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNonce", + "outputs": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getValidatorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct RegistryInit", + "name": "registryInit", + "type": "tuple", + "components": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint8", + "name": "threshold", + "type": "uint8" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccount" + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccountWithValidators" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "magicValue", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setRegistry" + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [ + { "internalType": "bool", "name": "supported", "type": "bool" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uninstallModule" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validSignature", + "type": "uint256" + } + ] + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "getNonce(address,address)": { + "params": { + "safe": "address of safe account", + "validator": "ERC7579 validator to encode" + } + }, + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": { + "details": "Decodes an ERC-4337 user operation into a Safe operation.", + "params": { "userOp": "The ERC-4337 user operation." }, + "returns": { + "operationData": "Encoded EIP-712 Safe operation data bytes used for signature verification.", + "signatures": "The Safe owner signatures extracted from the user operation.", + "validAfter": "The timestamp the user operation is valid from.", + "validUntil": "The timestamp the user operation is valid until." + } + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "params": { + "executors": "executor modules and initData", + "fallbacks": "fallback modules and initData", + "hooks": "hook module and initData", + "registryInit": "(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed", + "validators": "validator modules and initData" + } + }, + "initializeAccountWithValidators((address,bytes)[])": { + "details": "it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad" + }, + "installModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "params": { + "data": "abi.encodePacked(address validationModule, bytes signatures)", + "hash": "message hash of ERC1271 request" + } + }, + "setRegistry(address,address[],uint8)": { + "params": { + "attesters": "list of attesters", + "registry": "IERC7484 registry", + "threshold": "number of attesters required" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "details": "expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getActiveHook()": { "notice": "Get the current active global hook" }, + "getActiveHook(bytes4)": { + "notice": "Get the current active selector hook" + }, + "getExecutorsPaginated(address,uint256)": { + "notice": "Get paginated list of installed executors" + }, + "getNonce(address,address)": { + "notice": "Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator" + }, + "getValidatorsPaginated(address,uint256)": { + "notice": "Get paginated list of installed validators" + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "notice": "This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty" + }, + "initializeAccountWithValidators((address,bytes)[])": { + "notice": "This function is intended to be called by Launchpad.validateUserOp()" + }, + "installModule(uint256,address,bytes)": { + "notice": "Installs a 7579 Module of a certain type on the smart account" + }, + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "isValidSignature(bytes32,bytes)": { + "notice": "Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function" + }, + "setRegistry(address,address[],uint8)": { + "notice": "Configure the Safe7579 with a IERC7484 registry" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "uninstallModule(uint256,address,bytes)": { + "notice": "Uninstalls a Module of a certain type on the smart account." + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "ERC4337 v0.7 validation function" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Safe7579.sol": "Safe7579" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol": { + "keccak256": "0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6", + "urls": [ + "bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e", + "dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol": { + "keccak256": "0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b", + "urls": [ + "bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc", + "dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAggregator.sol": { + "keccak256": "0xf100d6fcc0c3b450b13e979b6a42c628c292a1bc340eccc2e7796b80e3975588", + "urls": [ + "bzz-raw://192938b5b27234d35c8098a319e879363c79f750eea4d0e409dc889a8ce5b155", + "dweb:/ipfs/QmURpaJFPqEtkKP2ngBsgZhAGN8wAWh5XQpYmCkiz4Urz5" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IEntryPoint.sol": { + "keccak256": "0x1972a5fcb3a808b58c85af5741949ef6af11ab0debd3ae8c708171ae1ae0d0c4", + "urls": [ + "bzz-raw://baa9837ae73b9e2362a47d42d081d7c0f3d8e878e5edb381117d94a6968949c9", + "dweb:/ipfs/QmUmo6FUE7fv5z1WzW1YFjxp8PqaeN2JrEee9au59w3Xhe" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/INonceManager.sol": { + "keccak256": "0xd575af0f6ebbd5f0b2933307d44cd7b4e03a69f4b817a67db5409bd3c89aeecb", + "urls": [ + "bzz-raw://3b1e2dea9b05cfba9d13339ed16d96457dc861013cc4f3f35b71a80f82448db3", + "dweb:/ipfs/QmVaGy5uGDMSiU2SzyokTjoHFyb39VVG5wtaM9KTnHyZSk" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IStakeManager.sol": { + "keccak256": "0xbe5ca9e7f254d031687419e7b96ef48c9c63e9398bbe992dc72ffc6dc14e0a04", + "urls": [ + "bzz-raw://1fffec71c38627a26fabb423350148009579f092623fb02b471a12d973763a00", + "dweb:/ipfs/QmRBi31QEYXHj3x1AnQ2jKa2eziZH1b9av396P3b4dw6bj" + ], + "license": "GPL-3.0-only" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "node_modules/@rhinestone/sentinellist/src/SentinelList.sol": { + "keccak256": "0x0fdb07d60acf6c8272517b2cf9a7ce36cef7dabd3acfc61e7424662818044da2", + "urls": [ + "bzz-raw://b67e9af0f8efcf0882e856b33ad8363024e9ed9b048795dedffcba9cd27f6062", + "dweb:/ipfs/Qme6oX3V1JCyTSZNEHuR5nByNxJUhDDuriJkNecVyWGVGr" + ], + "license": "MIT" + }, + "node_modules/@rhinestone/sentinellist/src/SentinelList4337.sol": { + "keccak256": "0x173a41622f0525822de4252e768907b83d5b43b6a939a6448082c5cfcdd76b33", + "urls": [ + "bzz-raw://61849503c2eb3bb4efd476860ed78995d6f2b6b2880d6c56178ca8eb6f6ac326", + "dweb:/ipfs/QmSfCu28jDnBDFVbDtj71isCJ6qGzZVc9cPUKjxffRdiCL" + ], + "license": "MIT" + }, + "node_modules/@safe-global/safe-contracts/contracts/handler/HandlerContext.sol": { + "keccak256": "0xce6da4c47f8691a4fcf07d20266b1a23ea757e49eedbfcf929f535f3f6e8072d", + "urls": [ + "bzz-raw://b57666c08d90b0b56344813511789a6d21b66044f049146d802f8db0e28899fc", + "dweb:/ipfs/QmYWHsFYNbibbAGfNNQrWon9KzNHfgu5E6B3bDteLKDEmL" + ], + "license": "LGPL-3.0-only" + }, + "node_modules/erc7579/src/core/AccountBase.sol": { + "keccak256": "0x11805c609cfd00250d52f440983ea54daaddc2d2bd0da83676ffef6192fecb82", + "urls": [ + "bzz-raw://93fdd8d0e9da56705838ff9deb8a9130e18296986ff8f59d73ba3f8b0b00c2c5", + "dweb:/ipfs/QmZwGFNjQjsPxAwrVuobhLDvSkLf8eduSQc35R69XFPcvf" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/core/Receiver.sol": { + "keccak256": "0x42d41b30a6582d95d737fd75122b621a8af1ec3123782d91a29385b67612b9e4", + "urls": [ + "bzz-raw://bfb32e6d912477279bf3105eeb7afaf4bfb6526541ef9944428a3d5b9133c23f", + "dweb:/ipfs/QmUc5nZW5NkC2prAUuRbFBdA2vSRwUBHKXD4evb5yiHSKf" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/interfaces/IERC7579Module.sol": { + "keccak256": "0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604", + "urls": [ + "bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5", + "dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d", + "urls": [ + "bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b", + "dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3" + ], + "license": "GPL-3.0" + }, + "src/ISafe7579.sol": { + "keccak256": "0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b", + "urls": [ + "bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98", + "dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9" + ], + "license": "MIT" + }, + "src/Safe7579.sol": { + "keccak256": "0xfe8ee150f3a01d2d43659e8bcc5f82b0fed942573b16d89ed52aed4614ae96bb", + "urls": [ + "bzz-raw://c2977b34b16b03eeb1c23d8342b6268a6377285ae1510f0f9d4028146953fdc2", + "dweb:/ipfs/Qmac9iNijFGqeaRGcbBTZAmzNCJuRqnw3SYfcooaVj9BbQ" + ], + "license": "GPL-3.0" + }, + "src/core/AccessControl.sol": { + "keccak256": "0x65292c830de10b53a1a7cb37d65134b3f820308b22932341c2ce3cf425cf39a6", + "urls": [ + "bzz-raw://1726e810a97e26707aa500d10386935b70f8a2c2791e799110f9543bd30c8bdd", + "dweb:/ipfs/QmZo8mqWdaWnJEoJsSNHUxHvf62eXCzQkexGELVKP33WLY" + ], + "license": "MIT" + }, + "src/core/ExecutionHelper.sol": { + "keccak256": "0x2efc3bc6427ac8c1ac78c449606ffb7aeee00db4c93170019046d7c90ca40b00", + "urls": [ + "bzz-raw://bec5af879e26b73e1f6654d95b89d3a79669bf89daa2ef560b8ac18c3af7329a", + "dweb:/ipfs/Qmd675PqtXn5dGrYBLzLGDtZG2xxH6RPkuR4DngRRWkQAg" + ], + "license": "MIT" + }, + "src/core/Initializer.sol": { + "keccak256": "0xe9db50095c600259f0e013d5fd81c9e6c1f244a0bf59eb0dee784bf8e8bb9cbb", + "urls": [ + "bzz-raw://45ed85640b0cd4d874bd9d732f9925ac64caaa162174d68061a58af4052ace3f", + "dweb:/ipfs/QmQAevyNMb28mfu2aPQzbuXT1MfSzXWLDX1CRXdWMnLfTP" + ], + "license": "MIT" + }, + "src/core/ModuleManager.sol": { + "keccak256": "0x42d3a02ca4321a708f43731caf2920312a0784e0ef99831f6869a8b704bdac0a", + "urls": [ + "bzz-raw://251342f930d887d9845e0b5e24eefd97ff141e4d3729c578d7550b1486d54499", + "dweb:/ipfs/QmQzD4wLAAVsLZveHtPm4Yn8f6Zt4BhJnyDN21sdx1qG93" + ], + "license": "MIT" + }, + "src/core/RegistryAdapter.sol": { + "keccak256": "0xa791b4946887e489f929f74e3b6028aada1d1e0c44fd9febad12067768a96f13", + "urls": [ + "bzz-raw://6be2cfa7cd054d1580ccd424f7c0c73fd176eada44bc16c9688d3ad0c4889a64", + "dweb:/ipfs/QmaAcy7LnYXruBesFpgm1tE3pBZcHWMmR6zsYfkZcGKS2K" + ], + "license": "MIT" + }, + "src/core/SafeOp.sol": { + "keccak256": "0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e", + "urls": [ + "bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04", + "dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ" + ], + "license": "GPL-3.0" + }, + "src/core/SetupDCUtil.sol": { + "keccak256": "0x8adecef3f28fe53b297dbe65dda65379536b833795910960a2c232e0f574326b", + "urls": [ + "bzz-raw://10dee7abb225ad918b052b38d5edae3e2e9205b330782968a0345cc7b1979500", + "dweb:/ipfs/QmakXnYAoPQqAqfVtFUUEGB8pa2QbaKL2kngg8DBXbEj1v" + ], + "license": "MIT" + }, + "src/core/SupportViewer.sol": { + "keccak256": "0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf", + "urls": [ + "bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd", + "dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC1271.sol": { + "keccak256": "0xb393da93ddb9aca17c3a952bd0c667f190cbf8e0abc2b63c075951469deaa21a", + "urls": [ + "bzz-raw://14f56c33dfb8e00c13da56987d1a4256c46984fde1a8bafed31617fe98bffea3", + "dweb:/ipfs/QmQUZoro4bYJjEJuw2nV3KL8sT6t6qZHupCD8HkjC54XDU" + ], + "license": "LGPL-3.0-only" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff", + "urls": [ + "bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c", + "dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/interfaces/ISafe.sol": { + "keccak256": "0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f", + "urls": [ + "bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457", + "dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4" + ], + "license": "LGPL-3.0-only" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + }, + "src/lib/ExecutionLib.sol": { + "keccak256": "0x5852404ef72dbe607a5402af160494067e7d9e6bf1fbf9460ff309e53b4db399", + "urls": [ + "bzz-raw://6f78188bf12cec49056da5dcfd33628b4ce76026a108d227b0c03b87f650dbce", + "dweb:/ipfs/QmaP3N8RuMYJD2wqfRhCMvGcnVzamT8RSbBNj2pYgeCThi" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 113 +} diff --git a/artifacts/Safe7579DCUtil.json b/artifacts/Safe7579DCUtil.json new file mode 100644 index 0000000..8f22230 --- /dev/null +++ b/artifacts/Safe7579DCUtil.json @@ -0,0 +1,443 @@ +{ + "abi": [ + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "staticCall", + "inputs": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "tryExecute", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tryExecuteReturn", + "inputs": [ + { + "name": "executions", + "type": "tuple[]", + "internalType": "struct Execution[]", + "components": [ + { "name": "target", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [ + { "name": "success", "type": "bool[]", "internalType": "bool[]" }, + { "name": "result", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unInstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { + "object": "0x6080604052348015600f57600080fd5b506109c28061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100d357806378272525146100e65780639517e29f146100f95780639abb6e171461010c57600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100aa575b600080fd5b6100956100903660046105ba565b61012d565b005b6100956100a53660046105ba565b610197565b6100bd6100b83660046105ba565b6101fc565b6040516100ca91906106c4565b60405180910390f35b6100956100e1366004610710565b6102be565b6100956100f43660046107da565b6102e1565b6100956101073660046107da565b61038a565b61011f61011a3660046105ba565b610429565b6040516100ca929190610864565b8060005b81811015610191573684848381811061014c5761014c6108be565b905060200281019061015e91906108d4565b905061018761017060208301836108f4565b6020830135610182604085018561090f565b610553565b5050600101610131565b50505050565b8060005b8181101561019157368484838181106101b6576101b66108be565b90506020028101906101c891906108d4565b90506101f16101da60208301836108f4565b60208301356101ec604085018561090f565b610589565b50505060010161019b565b6060818067ffffffffffffffff811115610218576102186106fa565b60405190808252806020026020018201604052801561024b57816020015b60608152602001906001900390816102365790505b50915060005b818110156102b6573685858381811061026c5761026c6108be565b905060200281019061027e91906108d4565b905061029061017060208301836108f4565b8483815181106102a2576102a26108be565b602090810291909101015250600101610251565b505092915050565b604051600080835160208501865afa3d6000833e80156102dc573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061030f908590859060040161095d565b600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103b8908590859060040161095d565b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061037c565b606080828067ffffffffffffffff811115610446576104466106fa565b60405190808252806020026020018201604052801561047957816020015b60608152602001906001900390816104645790505b5091508067ffffffffffffffff811115610495576104956106fa565b6040519080825280602002602001820160405280156104be578160200160208202803683370190505b50925060005b8181101561054a57368686838181106104df576104df6108be565b90506020028101906104f191906108d4565b90506105036101da60208301836108f4565b868481518110610515576105156108be565b6020026020010186858151811061052e5761052e6108be565b60209081029190910101919091529015159052506001016104c4565b50509250929050565b60405181838237600038838387895af1610570573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105cd57600080fd5b823567ffffffffffffffff8111156105e457600080fd5b8301601f810185136105f557600080fd5b803567ffffffffffffffff81111561060c57600080fd5b8560208260051b840101111561062157600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156106b857848303601f190188528151805180855260005b818110156106865760208184018101518783018201520161066a565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061064f565b50909695505050505050565b6020815260006106d76020830184610631565b9392505050565b80356001600160a01b03811681146106f557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072357600080fd5b61072c836106de565b9150602083013567ffffffffffffffff81111561074857600080fd5b8301601f8101851361075957600080fd5b803567ffffffffffffffff811115610773576107736106fa565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156107a2576107a26106fa565b6040528181528282016020018710156107ba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080606085870312156107f057600080fd5b84359350610800602086016106de565b9250604085013567ffffffffffffffff81111561081c57600080fd5b8501601f8101871361082d57600080fd5b803567ffffffffffffffff81111561084457600080fd5b87602082840101111561085657600080fd5b949793965060200194505050565b6040808252835190820181905260009060208501906060840190835b818110156108a05783511515835260209384019390920191600101610880565b505083810360208501526108b48186610631565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108ea57600080fd5b9190910192915050565b60006020828403121561090657600080fd5b6106d7826106de565b6000808335601e1984360301811261092657600080fd5b83018035915067ffffffffffffffff82111561094157600080fd5b60200191503681900382131561095657600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205c0679bac7989901111b6824de732603e322da5b9b75ee077344853294d8b7b664736f6c634300081a0033", + "sourceMap": "4015:532:132:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a2216571161005b5780636a221657146100d357806378272525146100e65780639517e29f146100f95780639abb6e171461010c57600080fd5b80633f707e6b1461008257806350c890221461009757806361085573146100aa575b600080fd5b6100956100903660046105ba565b61012d565b005b6100956100a53660046105ba565b610197565b6100bd6100b83660046105ba565b6101fc565b6040516100ca91906106c4565b60405180910390f35b6100956100e1366004610710565b6102be565b6100956100f43660046107da565b6102e1565b6100956101073660046107da565b61038a565b61011f61011a3660046105ba565b610429565b6040516100ca929190610864565b8060005b81811015610191573684848381811061014c5761014c6108be565b905060200281019061015e91906108d4565b905061018761017060208301836108f4565b6020830135610182604085018561090f565b610553565b5050600101610131565b50505050565b8060005b8181101561019157368484838181106101b6576101b66108be565b90506020028101906101c891906108d4565b90506101f16101da60208301836108f4565b60208301356101ec604085018561090f565b610589565b50505060010161019b565b6060818067ffffffffffffffff811115610218576102186106fa565b60405190808252806020026020018201604052801561024b57816020015b60608152602001906001900390816102365790505b50915060005b818110156102b6573685858381811061026c5761026c6108be565b905060200281019061027e91906108d4565b905061029061017060208301836108f4565b8483815181106102a2576102a26108be565b602090810291909101015250600101610251565b505092915050565b604051600080835160208501865afa3d6000833e80156102dc573d82f35b503d81fd5b604051638a91b0e360e01b81526001600160a01b03841690638a91b0e39061030f908590859060040161095d565b600060405180830381600087803b15801561032957600080fd5b505af115801561033d573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527f341347516a9de374859dfda710fa4828b2d48cb57d4fbe4c1149612b8e02276e93500190505b60405180910390a150505050565b6040516306d61fe760e41b81526001600160a01b03841690636d61fe70906103b8908590859060040161095d565b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b5050604080518781526001600160a01b03871660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905061037c565b606080828067ffffffffffffffff811115610446576104466106fa565b60405190808252806020026020018201604052801561047957816020015b60608152602001906001900390816104645790505b5091508067ffffffffffffffff811115610495576104956106fa565b6040519080825280602002602001820160405280156104be578160200160208202803683370190505b50925060005b8181101561054a57368686838181106104df576104df6108be565b90506020028101906104f191906108d4565b90506105036101da60208301836108f4565b868481518110610515576105156108be565b6020026020010186858151811061052e5761052e6108be565b60209081029190910101919091529015159052506001016104c4565b50509250929050565b60405181838237600038838387895af1610570573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b600080602083850312156105cd57600080fd5b823567ffffffffffffffff8111156105e457600080fd5b8301601f810185136105f557600080fd5b803567ffffffffffffffff81111561060c57600080fd5b8560208260051b840101111561062157600080fd5b6020919091019590945092505050565b600082825180855260208501945060208160051b8301016020850160005b838110156106b857848303601f190188528151805180855260005b818110156106865760208184018101518783018201520161066a565b506000602082870101526020601f19601f8301168601019450505060208201915060208801975060018101905061064f565b50909695505050505050565b6020815260006106d76020830184610631565b9392505050565b80356001600160a01b03811681146106f557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072357600080fd5b61072c836106de565b9150602083013567ffffffffffffffff81111561074857600080fd5b8301601f8101851361075957600080fd5b803567ffffffffffffffff811115610773576107736106fa565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156107a2576107a26106fa565b6040528181528282016020018710156107ba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080600080606085870312156107f057600080fd5b84359350610800602086016106de565b9250604085013567ffffffffffffffff81111561081c57600080fd5b8501601f8101871361082d57600080fd5b803567ffffffffffffffff81111561084457600080fd5b87602082840101111561085657600080fd5b949793965060200194505050565b6040808252835190820181905260009060208501906060840190835b818110156108a05783511515835260209384019390920191600101610880565b505083810360208501526108b48186610631565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126108ea57600080fd5b9190910192915050565b60006020828403121561090657600080fd5b6106d7826106de565b6000808335601e1984360301811261092657600080fd5b83018035915067ffffffffffffffff82111561094157600080fd5b60200191503681900382131561095657600080fd5b9250929050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea26469706673582212205c0679bac7989901111b6824de732603e322da5b9b75ee077344853294d8b7b664736f6c634300081a0033", + "sourceMap": "4015:532:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:283;;;;;;:::i;:::-;;:::i;:::-;;894:289;;;;;;:::i;:::-;;:::i;1478:391::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4083:462;;;;;;:::i;:::-;;:::i;596:263::-;;;;;;:::i;:::-;;:::i;333:257::-;;;;;;:::i;:::-;;:::i;1875:472::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1189:283::-;1275:10;1258:14;1303:163;1323:6;1319:1;:10;1303:163;;;1350:24;1377:10;;1388:1;1377:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1350:40;-1:-1:-1;1404:51:132;1413:12;;;;1350:40;1413:12;:::i;:::-;1427:11;;;;1440:14;;;;1427:5;1440:14;:::i;:::-;1404:8;:51::i;:::-;-1:-1:-1;;1331:3:132;;1303:163;;;;1248:224;1189:283;;:::o;894:289::-;983:10;966:14;1011:166;1031:6;1027:1;:10;1011:166;;;1058:24;1085:10;;1096:1;1085:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1058:40;-1:-1:-1;1112:54:132;1124:12;;;;1058:40;1124:12;:::i;:::-;1138:11;;;;1151:14;;;;1138:5;1151:14;:::i;:::-;1112:11;:54::i;:::-;-1:-1:-1;;;1039:3:132;;1011:166;;1478:391;1568:21;1622:10;;1658:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:28;;1693:9;1688:175;1708:6;1704:1;:10;1688:175;;;1735:24;1762:10;;1773:1;1762:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1735:40;-1:-1:-1;1801:51:132;1810:12;;;;1735:40;1810:12;:::i;1801:51::-;1789:6;1796:1;1789:9;;;;;;;;:::i;:::-;;;;;;;;;;:63;-1:-1:-1;1716:3:132;;1688:175;;;;1595:274;1478:391;;;;:::o;4083:462::-;4274:4;4268:11;4369:4;4363;4356;4350:11;4343:4;4337;4333:15;4325:6;4318:5;4307:67;4413:16;4407:4;4402:3;4387:43;4446:7;4443:44;;;4468:16;4463:3;4456:29;4443:44;;4512:16;4507:3;4500:29;596:263;745:44;;-1:-1:-1;;;745:44:132;;-1:-1:-1;;;;;745:34:132;;;;;:44;;780:8;;;;745:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;804:48:132;;;6537:25:153;;;-1:-1:-1;;;;;6598:32:153;;6593:2;6578:18;;6571:60;804:48:132;;-1:-1:-1;6510:18:153;;-1:-1:-1;804:48:132;;;;;;;;596:263;;;;:::o;333:257::-;480:42;;-1:-1:-1;;;480:42:132;;-1:-1:-1;;;;;480:32:132;;;;;:42;;513:8;;;;480:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;537:46:132;;;6537:25:153;;;-1:-1:-1;;;;;6598:32:153;;6593:2;6578:18;;6571:60;537:46:132;;-1:-1:-1;6510:18:153;;-1:-1:-1;537:46:132;6363:274:153;1875:472:132;1968:21;;2045:10;;2081:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2072:28;;2131:6;2120:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2120:18:132;;2110:28;;2154:9;2149:192;2169:6;2165:1;:10;2149:192;;;2196:24;2223:10;;2234:1;2223:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2196:40;-1:-1:-1;2276:54:132;2288:12;;;;2196:40;2288:12;:::i;2276:54::-;2251:7;2259:1;2251:10;;;;;;;;:::i;:::-;;;;;;2263:6;2270:1;2263:9;;;;;;;;:::i;:::-;;;;;;;;;;2250:80;;;;;;;;;-1:-1:-1;2177:3:132;;2149:192;;;;2018:329;1875:472;;;;;:::o;2353:912::-;2637:4;2631:11;2693:15;2676;2631:11;2655:54;2796:4;2784:10;2767:15;2759:6;2752:5;2744:6;2737:5;2732:69;2722:269;;2911:16;2905:4;2897:6;2882:46;2960:16;2952:6;2945:32;2722:269;3019:16;3011:6;3004:32;3091:4;3083:6;3079:17;3133:16;3127:4;3124:1;3109:41;3207:16;3200:24;3194:4;3187:38;2353:912;;-1:-1:-1;;;;2353:912:132:o;3271:740::-;3572:4;3566:11;3428:12;;3628:15;3611;3566:11;3590:54;3732:4;3720:10;3703:15;3695:6;3688:5;3680:6;3673:5;3668:69;3657:80;;3765:16;3757:6;3750:32;3837:4;3829:6;3825:17;3879:16;3873:4;3870:1;3855:41;3953:16;3950:1;3946:24;3940:4;3933:38;;3271:740;;;;;;;:::o;14:640:153:-;130:6;138;191:2;179:9;170:7;166:23;162:32;159:52;;;207:1;204;197:12;159:52;247:9;234:23;280:18;272:6;269:30;266:50;;;312:1;309;302:12;266:50;335:22;;388:4;380:13;;376:27;-1:-1:-1;366:55:153;;417:1;414;407:12;366:55;457:2;444:16;483:18;475:6;472:30;469:50;;;515:1;512;505:12;469:50;568:7;563:2;553:6;550:1;546:14;542:2;538:23;534:32;531:45;528:65;;;589:1;586;579:12;528:65;620:2;612:11;;;;;642:6;;-1:-1:-1;14:640:153;-1:-1:-1;;;14:640:153:o;659:955::-;710:3;741;773:5;767:12;800:6;795:3;788:19;832:4;827:3;823:14;816:21;;890:4;880:6;877:1;873:14;866:5;862:26;858:37;929:4;922:5;918:16;952:1;962:626;976:6;973:1;970:13;962:626;;;1041:16;;;-1:-1:-1;;1037:30:153;1025:43;;1091:13;;1133:9;;1155:22;;;1201:1;1215:161;1231:8;1226:3;1223:17;1215:161;;;1355:4;1341:12;;;1337:23;;1331:30;1308:14;;;1304:25;;1297:65;1250:14;1215:161;;;1219:3;1428:1;1421:4;1410:8;1404:4;1400:19;1396:30;1389:41;1499:4;1492:2;1488:7;1483:2;1473:8;1469:17;1465:31;1459:4;1455:42;1451:53;1443:61;;;;1539:4;1531:6;1527:17;1517:27;;1573:4;1568:3;1564:14;1557:21;;998:1;995;991:9;986:14;;962:626;;;-1:-1:-1;1604:4:153;;659:955;-1:-1:-1;;;;;;659:955:153:o;1619:277::-;1816:2;1805:9;1798:21;1779:4;1836:54;1886:2;1875:9;1871:18;1863:6;1836:54;:::i;:::-;1828:62;1619:277;-1:-1:-1;;;1619:277:153:o;1901:173::-;1969:20;;-1:-1:-1;;;;;2018:31:153;;2008:42;;1998:70;;2064:1;2061;2054:12;1998:70;1901:173;;;:::o;2079:127::-;2140:10;2135:3;2131:20;2128:1;2121:31;2171:4;2168:1;2161:15;2195:4;2192:1;2185:15;2211:1018;2288:6;2296;2349:2;2337:9;2328:7;2324:23;2320:32;2317:52;;;2365:1;2362;2355:12;2317:52;2388:29;2407:9;2388:29;:::i;:::-;2378:39;;2468:2;2457:9;2453:18;2440:32;2495:18;2487:6;2484:30;2481:50;;;2527:1;2524;2517:12;2481:50;2550:22;;2603:4;2595:13;;2591:27;-1:-1:-1;2581:55:153;;2632:1;2629;2622:12;2581:55;2672:2;2659:16;2698:18;2690:6;2687:30;2684:56;;;2720:18;;:::i;:::-;2769:2;2763:9;2861:2;2823:17;;-1:-1:-1;;2819:31:153;;;2852:2;2815:40;2811:54;2799:67;;2896:18;2881:34;;2917:22;;;2878:62;2875:88;;;2943:18;;:::i;:::-;2979:2;2972:22;3003;;;3044:15;;;3061:2;3040:24;3037:37;-1:-1:-1;3034:57:153;;;3087:1;3084;3077:12;3034:57;3143:6;3138:2;3134;3130:11;3125:2;3117:6;3113:15;3100:50;3196:1;3191:2;3182:6;3174;3170:19;3166:28;3159:39;3217:6;3207:16;;;;;2211:1018;;;;;:::o;3234:728::-;3322:6;3330;3338;3346;3399:2;3387:9;3378:7;3374:23;3370:32;3367:52;;;3415:1;3412;3405:12;3367:52;3451:9;3438:23;3428:33;;3480:38;3514:2;3503:9;3499:18;3480:38;:::i;:::-;3470:48;;3569:2;3558:9;3554:18;3541:32;3596:18;3588:6;3585:30;3582:50;;;3628:1;3625;3618:12;3582:50;3651:22;;3704:4;3696:13;;3692:27;-1:-1:-1;3682:55:153;;3733:1;3730;3723:12;3682:55;3773:2;3760:16;3799:18;3791:6;3788:30;3785:50;;;3831:1;3828;3821:12;3785:50;3876:7;3871:2;3862:6;3858:2;3854:15;3850:24;3847:37;3844:57;;;3897:1;3894;3887:12;3844:57;3234:728;;;;-1:-1:-1;3928:2:153;3920:11;;-1:-1:-1;;;3234:728:153:o;3967:817::-;4247:2;4259:21;;;4329:13;;4232:18;;;4351:22;;;4199:4;;4442;4430:17;;;4404:2;4389:18;;;4199:4;4475:189;4489:6;4486:1;4483:13;4475:189;;;4564:13;;4557:21;4550:29;4538:42;;4609:4;4637:17;;;;4600:14;;;;4511:1;4504:9;4475:189;;;4479:3;;4711:9;4706:3;4702:19;4695:4;4684:9;4680:20;4673:49;4739:39;4774:3;4766:6;4739:39;:::i;:::-;4731:47;3967:817;-1:-1:-1;;;;;;3967:817:153:o;4789:127::-;4850:10;4845:3;4841:20;4838:1;4831:31;4881:4;4878:1;4871:15;4905:4;4902:1;4895:15;4921:327;5017:4;5075:11;5062:25;5169:2;5165:7;5154:8;5138:14;5134:29;5130:43;5110:18;5106:68;5096:96;;5188:1;5185;5178:12;5096:96;5209:33;;;;;4921:327;-1:-1:-1;;4921:327:153:o;5253:186::-;5312:6;5365:2;5353:9;5344:7;5340:23;5336:32;5333:52;;;5381:1;5378;5371:12;5333:52;5404:29;5423:9;5404:29;:::i;5444:521::-;5521:4;5527:6;5587:11;5574:25;5681:2;5677:7;5666:8;5650:14;5646:29;5642:43;5622:18;5618:68;5608:96;;5700:1;5697;5690:12;5608:96;5727:33;;5779:20;;;-1:-1:-1;5822:18:153;5811:30;;5808:50;;;5854:1;5851;5844:12;5808:50;5887:4;5875:17;;-1:-1:-1;5918:14:153;5914:27;;;5904:38;;5901:58;;;5955:1;5952;5945:12;5901:58;5444:521;;;;;:::o;5970:388::-;6127:2;6116:9;6109:21;6166:6;6161:2;6150:9;6146:18;6139:34;6223:6;6215;6210:2;6199:9;6195:18;6182:48;6279:1;6250:22;;;6274:2;6246:31;;;6239:42;;;;6342:2;6321:15;;;-1:-1:-1;;6317:29:153;6302:45;6298:54;;5970:388;-1:-1:-1;5970:388:153:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "execute((address,uint256,bytes)[])": "3f707e6b", + "executeReturn((address,uint256,bytes)[])": "61085573", + "installModule(uint256,address,bytes)": "9517e29f", + "staticCall(address,bytes)": "6a221657", + "tryExecute((address,uint256,bytes)[])": "50c89022", + "tryExecuteReturn((address,uint256,bytes)[])": "9abb6e17", + "unInstallModule(uint256,address,bytes)": "78272525" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"executeReturn\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"staticCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Execution[]\",\"name\":\"executions\",\"type\":\"tuple[]\"}],\"name\":\"tryExecuteReturn\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"},{\"internalType\":\"bytes[]\",\"name\":\"result\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"unInstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/DCUtil.sol\":\"Safe7579DCUtil\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]},\"src/utils/DCUtil.sol\":{\"keccak256\":\"0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5\",\"dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeReturn", + "outputs": [ + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "staticCall" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecute" + }, + { + "inputs": [ + { + "internalType": "struct Execution[]", + "name": "executions", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "tryExecuteReturn", + "outputs": [ + { "internalType": "bool[]", "name": "success", "type": "bool[]" }, + { "internalType": "bytes[]", "name": "result", "type": "bytes[]" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "unInstallModule" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/utils/DCUtil.sol": "Safe7579DCUtil" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + }, + "src/utils/DCUtil.sol": { + "keccak256": "0x4c98a180da91c7849a81c8ec9a381de0fb1cf9de4c95a03ac9c4a6f206fa4784", + "urls": [ + "bzz-raw://88f4c60b9aa9fab91ee7db557c54501b8323453c7880791694862695184e6ca5", + "dweb:/ipfs/QmdgJ9tdpozq1kHpFhoy4Vzs4Z5QELdiqvPHfyGbikFVn5" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 132 +} diff --git a/artifacts/Safe7579Launchpad.json b/artifacts/Safe7579Launchpad.json new file mode 100644 index 0000000..0dd6f45 --- /dev/null +++ b/artifacts/Safe7579Launchpad.json @@ -0,0 +1,1445 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { "name": "entryPoint", "type": "address", "internalType": "address" }, + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + } + ], + "stateMutability": "nonpayable" + }, + { "type": "receive", "stateMutability": "payable" }, + { + "type": "function", + "name": "REGISTRY", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "contract IERC7484" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SUPPORTED_ENTRYPOINT", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "addSafe7579", + "inputs": [ + { "name": "safe7579", "type": "address", "internalType": "address" }, + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInitHash", + "inputs": [], + "outputs": [ + { "name": "value", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hash", + "inputs": [ + { + "name": "data", + "type": "tuple", + "internalType": "struct Safe7579Launchpad.InitData", + "components": [ + { + "name": "singleton", + "type": "address", + "internalType": "address" + }, + { + "name": "owners", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "threshold", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "setupTo", "type": "address", "internalType": "address" }, + { "name": "setupData", "type": "bytes", "internalType": "bytes" }, + { + "name": "safe7579", + "type": "address", + "internalType": "contract ISafe7579" + }, + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { + "name": "module", + "type": "address", + "internalType": "address" + }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "initSafe7579", + "inputs": [ + { "name": "safe7579", "type": "address", "internalType": "address" }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "preValidationSetup", + "inputs": [ + { "name": "initHash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "preInit", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "predictSafeAddress", + "inputs": [ + { "name": "singleton", "type": "address", "internalType": "address" }, + { + "name": "safeProxyFactory", + "type": "address", + "internalType": "address" + }, + { "name": "creationCode", "type": "bytes", "internalType": "bytes" }, + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "factoryInitializer", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "safeProxy", "type": "address", "internalType": "address" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "setupSafe", + "inputs": [ + { + "name": "initData", + "type": "tuple", + "internalType": "struct Safe7579Launchpad.InitData", + "components": [ + { + "name": "singleton", + "type": "address", + "internalType": "address" + }, + { + "name": "owners", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "threshold", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "setupTo", "type": "address", "internalType": "address" }, + { "name": "setupData", "type": "bytes", "internalType": "bytes" }, + { + "name": "safe7579", + "type": "address", + "internalType": "contract ISafe7579" + }, + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { + "name": "module", + "type": "address", + "internalType": "address" + }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "callData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [ + { "name": "supported", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "validationData", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { "type": "error", "name": "InvalidEntryPoint", "inputs": [] }, + { "type": "error", "name": "InvalidInitHash", "inputs": [] }, + { "type": "error", "name": "InvalidSetup", "inputs": [] }, + { "type": "error", "name": "InvalidSignature", "inputs": [] }, + { "type": "error", "name": "InvalidUserOperationData", "inputs": [] }, + { "type": "error", "name": "OnlyDelegatecall", "inputs": [] }, + { "type": "error", "name": "OnlyProxy", "inputs": [] }, + { "type": "error", "name": "PreValidationSetupFailed", "inputs": [] }, + { + "type": "error", + "name": "Safe7579LaunchpadAlreadyInitialized", + "inputs": [] + }, + { + "type": "error", + "name": "WrongContractSignature", + "inputs": [ + { + "name": "contractSignature", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "WrongContractSignatureFormat", + "inputs": [ + { "name": "s", "type": "uint256", "internalType": "uint256" }, + { + "name": "contractSignatureLen", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "signaturesLen", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "bytecode": { + "object": "0x60e060405234801561001057600080fd5b50604051612dea380380612dea83398101604081905261002f91610089565b6001600160a01b03821661005657604051632039d3c960e01b815260040160405180910390fd5b306080526001600160a01b0391821660a0521660c0526100c3565b6001600160a01b038116811461008657600080fd5b50565b6000806040838503121561009c57600080fd5b82516100a781610071565b60208401519092506100b881610071565b809150509250929050565b60805160a05160c051612cc161012960003960008181610159015281816104900152610fc60152600081816101aa015281816105be015281816110a701526113ea01526000818160f6015281816105690152818161099301526111100152612cc16000f3fe6080604052600436106100ec5760003560e01c8063663c87d81161008a578063d78343d911610059578063d78343d914610348578063d9ed0e8f14610368578063f2dc691d14610388578063f698da25146103a857600080fd5b8063663c87d81461028c578063928107f9146102ac5780639cfd7cff146102cc578063d03c79141461031857600080fd5b806319822f7c116100c657806319822f7c146101ec5780633c9de1b81461021a5780634fff40e11461023c57806355d559f41461025c57600080fd5b806306433b1b14610147578063137e051e1461019857806315cca638146101cc57600080fd5b36610142576000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614610140576040516308e3edd160e41b815260040160405180910390fd5b005b600080fd5b34801561015357600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a457600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d857600080fd5b506101406101e7366004611ab5565b6103bd565b3480156101f857600080fd5b5061020c610207366004611bc2565b610563565b60405190815260200161018f565b34801561022657600080fd5b50600080516020612c6c8339815191525461020c565b34801561024857600080fd5b50610140610257366004611c0f565b61098e565b34801561026857600080fd5b5061027c610277366004611c99565b610abe565b60405161018f9493929190611d3a565b34801561029857600080fd5b5061017b6102a7366004611e94565b610d1b565b3480156102b857600080fd5b5061020c6102c7366004612094565b610df5565b3480156102d857600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161018f91906121c2565b34801561032457600080fd5b506103386103333660046121dc565b610e47565b604051901515815260200161018f565b34801561035457600080fd5b506101406103633660046121f5565b610ef0565b34801561037457600080fd5b50610140610383366004612321565b61109c565b34801561039457600080fd5b506103386103a33660046121dc565b611324565b3480156103b457600080fd5b5061020c611373565b3330146103dd57604051630a57d61d60e01b815260040160405180910390fd5b60405163610b592560e01b81526001600160a01b038b166004820152309063610b592590602401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b50506040805160008082526020820190925230935063540fb4f992509061047c565b6040805180820190915260008152606060208201528152602001906001900390816104545790505b508b8b8b8b8b8b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8c166020909101526040516001600160e01b031960e08b901b16815261052598979695949392919060040161255c565b600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b5050505050505050505050505050565b600080547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146105b3576040516308e3edd160e41b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105fc57604051632039d3c960e01b815260040160405180910390fd5b61060960608501856125cf565b61061891600491600091612615565b6106219161263f565b6001600160e01b03191663d9ed0e8f60e01b146106515760405163c3d40f7760e01b815260040160405180910390fd5b600061066060608601866125cf565b61066e916004908290612615565b81019061067b9190612094565b9050610693600080516020612c6c8339815191525490565b61069c82610df5565b146106ba5760405163278328b160e21b815260040160405180910390fd5b600080866020013590508060601c915060008360a001516001600160a01b03168460c001516040516024016106ef9190612677565b60408051601f19818403018152918152602080830180516001600160e01b0316633cd56b0760e11b1790529051610729929133910161268a565b60408051601f1981840301815290829052610743916126bc565b6000604051808303816000865af19150503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b50509050806107a75760405163c3d40f7760e01b815260040160405180910390fd5b60c084015151600090815b818110156108c95760008760c0015182815181106107d2576107d26126d8565b6020026020010151600001519050806001600160a01b0316636d61fe708960c001518481518110610805576108056126d8565b6020026020010151602001516040518263ffffffff1660e01b815260040161082d91906121c2565b600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b505060408051600181526001600160a01b03851660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905060405180910390a1866001600160a01b0316816001600160a01b0316036108c057600193505b506001016107b2565b50811561094857604051639700320360e01b81526001600160a01b038616906397003203906108fe908d908d906004016127ce565b6020604051808303816000875af115801561091d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094191906127f0565b965061096f565b6000806000610957898e6113cc565b92509250925061096983158383611542565b99505050505b8715610981576000806000808b335af1505b5050505050509392505050565b6000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146109dd576040516308e3edd160e41b815260040160405180910390fd5b60006109f5600080516020612c6c8339815191525490565b14610a135760405163d4d496e560e01b815260040160405180910390fd5b610a2984600080516020612c6c83398151915255565b6001600160a01b03831615610ab8576000836001600160a01b03168383604051610a54929190612809565b600060405180830381855af49150503d8060008114610a8f576040519150601f19603f3d011682016040523d82523d6000602084013e610a94565b606091505b5050905080610ab657604051631f57fed560e31b815260040160405180910390fd5b505b50505050565b6060600080823682610ad46101008901896125cf565b9092509050610ae7600660008385612615565b610af091612819565b60d01c9450610b03600c60068385612615565b610b0c91612819565b60d01c9350610b1e81600c8185612615565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610b9a91508a018a61284f565b6001600160a01b0316815260200188602001358152602001888060400190610bc291906125cf565b604051610bd0929190612809565b6040519081900390208152602001610beb60608a018a6125cf565b604051610bf9929190612809565b60405180910390208152602001610c0f8961157a565b6001600160801b03168152602001610c2689611590565b6001600160801b031681526020018860a001358152602001610c47896115a5565b6001600160801b03168152602001610c5e896115b4565b6001600160801b03168152602001610c7960e08a018a6125cf565b604051610c87929190612809565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610cd3611373565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b6000818051906020012083604051602001610d40929190918252602082015260400190565b60405160208183030381529060405280519060200120925060ff60f81b858486896001600160a01b0316604051602001610d7b92919061286c565b60405160208183030381529060405280519060200120604051602001610dd394939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098610e2a98909796910161288e565b604051602081830303815290604052805190602001209050919050565b600081600881901b6001600160f81b03198216600160f81b03610e6d5760019250610ea9565b6001600160f81b03198216610e855760019250610ea9565b6001600160f81b031980831603610e9f5760019250610ea9565b5060009392505050565b828015610ebe57506001600160f81b03198116155b15610eca575050919050565b828015610ee457506001600160f81b03198116600160f81b145b15610e9f575050919050565b60405163610b592560e01b81526001600160a01b038d166004820152309063610b592590602401600060405180830381600087803b158015610f3157600080fd5b505af1158015610f45573d6000803e3d6000fd5b505060405163f08a032360e01b81526001600160a01b038f16600482015230925063f08a03239150602401600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b50505050306001600160a01b031663540fb4f98c8c8c8c8c8c8c8c60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018e8e8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8d166020909101526040516001600160e01b031960e08c901b16815261105c9998979695949392919060040161290b565b600060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b50505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110e557604051632039d3c960e01b815260040160405180910390fd5b6110f2602082018261284f565b600080546001600160a01b0319166001600160a01b039283161790557f000000000000000000000000000000000000000000000000000000000000000016611140608083016060840161284f565b6001600160a01b03161461116757604051633007073760e01b815260040160405180910390fd5b6302b994c760e31b61117c60808301836125cf565b61118b91600491600091612615565b6111949161263f565b6001600160e01b031916146111bc57604051633007073760e01b815260040160405180910390fd5b3063b63e800d6111cf6020840184612980565b60408501356111e4608087016060880161284f565b6111f160808801886125cf565b61120160c08a0160a08b0161284f565b60008060006040518b63ffffffff1660e01b815260040161122b9a999897969594939291906129c9565b600060405180830381600087803b15801561124557600080fd5b505af1158015611259573d6000803e3d6000fd5b50506000600080516020612c6c83398151915255506112759050565b60008061128860c0840160a0850161284f565b6001600160a01b031661129e60e08501856125cf565b306040516020016112b193929190612a80565b60408051601f19818403018152908290526112cb916126bc565b6000604051808303816000865af19150503d8060008114611308576040519150601f19603f3d011682016040523d82523d6000602084013e61130d565b606091505b50915091508161131f57805160208201fd5b505050565b60006001820361133657506001919050565b6002820361134657506001919050565b6003820361135657506001919050565b6004820361136657506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60008060006060808660a001516001600160a01b03166355d559f4877f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611426929190612aa1565b600060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261146b9190810190612b2e565b8351602085012060408c01519298509296509294509192509060009061149490839085906115c9565b905061149f816118c1565b60208901516114ad816118c1565b6114b6816118cd565b80516000805b8281101561152e5760006114f28583815181106114db576114db6126d8565b6020026020010151876118d690919063ffffffff16565b5090508015611525578261150581612bcc565b9350508d6040015183106115255760019b5050505050505050505061153b565b506001016114bc565b5060009950505050505050505b9250925092565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561156a57600061156d565b60015b60ff161717949350505050565b600061158a826080013560801c90565b92915050565b60006001600160801b0360808301351661158a565b600060c082013560801c61158a565b60006001600160801b0360c08301351661158a565b606060006115d8836041612be5565b8451909150836001600160401b038111156115f5576115f5611d86565b60405190808252806020026020018201604052801561161e578160200160208202803683370190505b5092508181101561164257604051638baa579f60e01b815260040160405180910390fd5b60005b848110156118b7576000806000806116758a86604102016020810151604082015160609092015160001a92909190565b9250925092508260ff16600003611816579092508290611696896041612be5565b8110156116cc576040516338a245ff60e11b81526004810182905260006024820181905260448201526064015b60405180910390fd5b856116d8826020612bfc565b1115611708576040516338a245ff60e11b81526004810182905260006024820152604481018790526064016116c3565b6020818b018101519087908290611720908590612bfc565b61172a9190612bfc565b111561175a576040516338a245ff60e11b81526004810183905260248101829052604481018890526064016116c3565b60606020838d01019050631626ba7e60e01b6001600160e01b031916866001600160a01b0316631626ba7e8f846040518363ffffffff1660e01b81526004016117a4929190612c0f565b602060405180830381865afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e59190612c28565b6001600160e01b0319161461180f578060405163605d348960e01b81526004016116c391906121c2565b505061187c565b601e8360ff16111561186d576118666118548c6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b61185f600486612c52565b84846118f9565b935061187c565b6118798b8484846118f9565b93505b8388868151811061188f5761188f6126d8565b6001600160a01b03909216602092830291909101909101525050600190920191506116459050565b5050509392505050565b6118ca81611937565b50565b6118ca8161198c565b6000806118ee84846001600160a01b031660006119d5565b909590945092505050565b60006040518560005260ff85166020528360405282606052602060406080600060015afa5060006060523d6060185191508060405250949350505050565b8051600082528060051b82016020601f198185015b8201838111611984578051828201805182811161196b5750505061194c565b5b818601528301805182811161196c575084015261194c565b505050915250565b60028151106118ca576020810160408201600183510160051b83015b81518351146119bc57602083019250815183525b6020820191508082036119a857505081900360051c9052565b60008060001960018651600087870197505b81830160011c94508460051b8901518701905087811482841117611a2157808811611a165783850191506119e7565b6001850192506119e7565b84151597148716989290930190950295509350505050565b6001600160a01b03811681146118ca57600080fd5b803561136e81611a39565b60008083601f840112611a6b57600080fd5b5081356001600160401b03811115611a8257600080fd5b6020830191508360208260051b8501011115611a9d57600080fd5b9250929050565b803560ff8116811461136e57600080fd5b60008060008060008060008060008060c08b8d031215611ad457600080fd5b611add8b611a4e565b995060208b01356001600160401b03811115611af857600080fd5b611b048d828e01611a59565b909a5098505060408b01356001600160401b03811115611b2357600080fd5b611b2f8d828e01611a59565b90985096505060608b01356001600160401b03811115611b4e57600080fd5b611b5a8d828e01611a59565b90965094505060808b01356001600160401b03811115611b7957600080fd5b611b858d828e01611a59565b9094509250611b98905060a08c01611aa4565b90509295989b9194979a5092959850565b60006101208284031215611bbc57600080fd5b50919050565b600080600060608486031215611bd757600080fd5b83356001600160401b03811115611bed57600080fd5b611bf986828701611ba9565b9660208601359650604090950135949350505050565b60008060008060608587031215611c2557600080fd5b843593506020850135611c3781611a39565b925060408501356001600160401b03811115611c5257600080fd5b8501601f81018713611c6357600080fd5b80356001600160401b03811115611c7957600080fd5b876020828401011115611c8b57600080fd5b949793965060200194505050565b60008060408385031215611cac57600080fd5b82356001600160401b03811115611cc257600080fd5b611cce85828601611ba9565b9250506020830135611cdf81611a39565b809150509250929050565b60005b83811015611d05578181015183820152602001611ced565b50506000910152565b60008151808452611d26816020860160208601611cea565b601f01601f19169290920160200192915050565b608081526000611d4d6080830187611d0e565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152611d7b8185611d0e565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611dbe57611dbe611d86565b60405290565b60405161010081016001600160401b0381118282101715611dbe57611dbe611d86565b604051601f8201601f191681016001600160401b0381118282101715611e0f57611e0f611d86565b604052919050565b60006001600160401b03821115611e3057611e30611d86565b50601f01601f191660200190565b600082601f830112611e4f57600080fd5b8135611e62611e5d82611e17565b611de7565b818152846020838601011115611e7757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611eac57600080fd5b8535611eb781611a39565b94506020860135611ec781611a39565b935060408601356001600160401b03811115611ee257600080fd5b611eee88828901611e3e565b9350506060860135915060808601356001600160401b03811115611f1157600080fd5b611f1d88828901611e3e565b9150509295509295909350565b60006001600160401b03821115611f4357611f43611d86565b5060051b60200190565b600082601f830112611f5e57600080fd5b8135611f6c611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611f8e57600080fd5b602085015b83811015611fb4578035611fa681611a39565b835260209283019201611f93565b5095945050505050565b600082601f830112611fcf57600080fd5b8135611fdd611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611fff57600080fd5b602085015b83811015611fb45780356001600160401b0381111561202257600080fd5b86016040818903601f1901121561203857600080fd5b612040611d9c565b602082013561204e81611a39565b815260408201356001600160401b0381111561206957600080fd5b6120788a602083860101611e3e565b6020830152508085525050602083019250602081019050612004565b6000602082840312156120a657600080fd5b81356001600160401b038111156120bc57600080fd5b820161010081850312156120cf57600080fd5b6120d7611dc4565b6120e082611a4e565b815260208201356001600160401b038111156120fb57600080fd5b61210786828501611f4d565b6020830152506040828101359082015261212360608301611a4e565b606082015260808201356001600160401b0381111561214157600080fd5b61214d86828501611e3e565b60808301525061215f60a08301611a4e565b60a082015260c08201356001600160401b0381111561217d57600080fd5b61218986828501611fbe565b60c08301525060e08201356001600160401b038111156121a857600080fd5b6121b486828501611e3e565b60e083015250949350505050565b6020815260006121d56020830184611d0e565b9392505050565b6000602082840312156121ee57600080fd5b5035919050565b60008060008060008060008060008060008060e08d8f03121561221757600080fd5b6122208d611a4e565b9b506001600160401b0360208e0135111561223a57600080fd5b61224a8e60208f01358f01611a59565b909b5099506001600160401b0360408e0135111561226757600080fd5b6122778e60408f01358f01611a59565b90995097506001600160401b0360608e0135111561229457600080fd5b6122a48e60608f01358f01611a59565b90975095506001600160401b0360808e013511156122c157600080fd5b6122d18e60808f01358f01611a59565b90955093506001600160401b0360a08e013511156122ee57600080fd5b6122fe8e60a08f01358f01611a59565b909350915061230f60c08e01611aa4565b90509295989b509295989b509295989b565b60006020828403121561233357600080fd5b81356001600160401b0381111561234957600080fd5b820161010081850312156121d557600080fd5b600082825180855260208501945060208160051b8301016020850160005b838110156123cc57848303601f19018852815180516001600160a01b031684526020908101516040918501829052906123b590850182611d0e565b6020998a019990945092909201915060010161237a565b50909695505050505050565b6000808335601e198436030181126123ef57600080fd5b83016020810192503590506001600160401b0381111561240e57600080fd5b803603821315611a9d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208501945060208460051b8201018360005b868110156123cc57838303601f19018852813536879003603e1901811261248557600080fd5b8601803561249281611a39565b6001600160a01b031684526124aa60208201826123d8565b9150604060208601526124c160408601838361241d565b60209a8b019a9095509390930192505060010161245f565b600081518084526020840193506020830160005b828110156125145781516001600160a01b03168652602095860195909101906001016124ed565b5093949350505050565b60018060a01b038151168252600060208201516060602085015261254560608501826124d9565b60409384015160ff16949093019390935250919050565b60a08152600061256f60a083018b61235c565b8281036020840152612582818a8c612446565b9050828103604084015261259781888a612446565b905082810360608401526125ac818688612446565b905082810360808401526125c0818561251e565b9b9a5050505050505050505050565b6000808335601e198436030181126125e657600080fd5b8301803591506001600160401b0382111561260057600080fd5b602001915036819003821315611a9d57600080fd5b6000808585111561262557600080fd5b8386111561263257600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015612670576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6020815260006121d5602083018461235c565b6000835161269c818460208801611cea565b60609390931b6001600160601b0319169190920190815260140192915050565b600082516126ce818460208701611cea565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b612708826126fb83611a4e565b6001600160a01b03169052565b60208181013590830152600061272160408301836123d8565b61012060408601526127386101208601828461241d565b91505061274860608401846123d8565b858303606087015261275b83828461241d565b6080868101359088015260a0808701359088015260c08087013590880152925061278b91505060e08401846123d8565b85830360e087015261279e83828461241d565b925050506127b06101008401846123d8565b8583036101008701526127c483828461241d565b9695505050505050565b6040815260006127e160408301856126ee565b90508260208301529392505050565b60006020828403121561280257600080fd5b5051919050565b8183823760009101908152919050565b80356001600160d01b03198116906006841015612670576001600160d01b031960069490940360031b84901b1690921692915050565b60006020828403121561286157600080fd5b81356121d581611a39565b6000835161287e818460208801611cea565b9190910191825250602001919050565b6001600160a01b038816815260e0602082018190526000906128b2908301896124d9565b604083018890526001600160a01b038716606084015282810360808401526128da8187611d0e565b6001600160a01b03861660a085015283810360c085015290506128fd818561235c565b9a9950505050505050505050565b60a08152600061291f60a083018b8d612446565b8281036020840152612932818a8c612446565b9050828103604084015261294781888a612446565b9050828103606084015261295c818688612446565b90508281036080840152612970818561251e565b9c9b505050505050505050505050565b6000808335601e1984360301811261299757600080fd5b8301803591506001600160401b038211156129b157600080fd5b6020019150600581901b3603821315611a9d57600080fd5b61010080825281018a905260008b6101208301825b8d811015612a0e5782356129f181611a39565b6001600160a01b03168252602092830192909101906001016129de565b508b6020850152612a2a604085018c6001600160a01b03169052565b8381036060850152612a3d818a8c61241d565b92505050612a5660808301876001600160a01b03169052565b6001600160a01b03851660a08301528360c08301526125c060e08301846001600160a01b03169052565b8284823760609190911b6001600160601b0319169101908152601401919050565b604081526000612ab460408301856126ee565b905060018060a01b03831660208301529392505050565b600082601f830112612adc57600080fd5b8151612aea611e5d82611e17565b818152846020838601011115612aff57600080fd5b612b10826020830160208701611cea565b949350505050565b805165ffffffffffff8116811461136e57600080fd5b60008060008060808587031215612b4457600080fd5b84516001600160401b03811115612b5a57600080fd5b612b6687828801612acb565b945050612b7560208601612b18565b9250612b8360408601612b18565b915060608501516001600160401b03811115612b9e57600080fd5b612baa87828801612acb565b91505092959194509250565b634e487b7160e01b600052601160045260246000fd5b600060018201612bde57612bde612bb6565b5060010190565b808202811582820484141761158a5761158a612bb6565b8082018082111561158a5761158a612bb6565b828152604060208201526000612b106040830184611d0e565b600060208284031215612c3a57600080fd5b81516001600160e01b0319811681146121d557600080fd5b60ff828116828216039081111561158a5761158a612bb656fe982e06ee6a56dfc0f1ac189a5d23506361ca0a3ce45a9c7b8d33d65d43746a24a2646970667358221220b8570cdd622e1fbbf9414238ac24ec7629c0bf87595f396efe2bec7415eff9ce64736f6c634300081a0033", + "sourceMap": "1487:15193:114:-:0;;;2604:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2669:24:114;;2665:56;;2702:19;;-1:-1:-1;;;2702:19:114;;;;;;;;;;;2665:56;2747:4;2732:20;;-1:-1:-1;;;;;2762:33:114;;;;;2805:19;;;1487:15193;;14:131:153;-1:-1:-1;;;;;89:31:153;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:403::-;247:6;255;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;356:9;350:16;375:31;400:5;375:31;:::i;:::-;475:2;460:18;;454:25;425:5;;-1:-1:-1;488:33:153;454:25;488:33;:::i;:::-;540:7;530:17;;;150:403;;;;;:::o;:::-;1487:15193:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436106100ec5760003560e01c8063663c87d81161008a578063d78343d911610059578063d78343d914610348578063d9ed0e8f14610368578063f2dc691d14610388578063f698da25146103a857600080fd5b8063663c87d81461028c578063928107f9146102ac5780639cfd7cff146102cc578063d03c79141461031857600080fd5b806319822f7c116100c657806319822f7c146101ec5780633c9de1b81461021a5780634fff40e11461023c57806355d559f41461025c57600080fd5b806306433b1b14610147578063137e051e1461019857806315cca638146101cc57600080fd5b36610142576000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116911614610140576040516308e3edd160e41b815260040160405180910390fd5b005b600080fd5b34801561015357600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a457600080fd5b5061017b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d857600080fd5b506101406101e7366004611ab5565b6103bd565b3480156101f857600080fd5b5061020c610207366004611bc2565b610563565b60405190815260200161018f565b34801561022657600080fd5b50600080516020612c6c8339815191525461020c565b34801561024857600080fd5b50610140610257366004611c0f565b61098e565b34801561026857600080fd5b5061027c610277366004611c99565b610abe565b60405161018f9493929190611d3a565b34801561029857600080fd5b5061017b6102a7366004611e94565b610d1b565b3480156102b857600080fd5b5061020c6102c7366004612094565b610df5565b3480156102d857600080fd5b50604080518082018252601a81527f7268696e6573746f6e652e73616665373537392e76312e302e300000000000006020820152905161018f91906121c2565b34801561032457600080fd5b506103386103333660046121dc565b610e47565b604051901515815260200161018f565b34801561035457600080fd5b506101406103633660046121f5565b610ef0565b34801561037457600080fd5b50610140610383366004612321565b61109c565b34801561039457600080fd5b506103386103a33660046121dc565b611324565b3480156103b457600080fd5b5061020c611373565b3330146103dd57604051630a57d61d60e01b815260040160405180910390fd5b60405163610b592560e01b81526001600160a01b038b166004820152309063610b592590602401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b50506040805160008082526020820190925230935063540fb4f992509061047c565b6040805180820190915260008152606060208201528152602001906001900390816104545790505b508b8b8b8b8b8b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8c166020909101526040516001600160e01b031960e08b901b16815261052598979695949392919060040161255c565b600060405180830381600087803b15801561053f57600080fd5b505af1158015610553573d6000803e3d6000fd5b5050505050505050505050505050565b600080547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146105b3576040516308e3edd160e41b815260040160405180910390fd5b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105fc57604051632039d3c960e01b815260040160405180910390fd5b61060960608501856125cf565b61061891600491600091612615565b6106219161263f565b6001600160e01b03191663d9ed0e8f60e01b146106515760405163c3d40f7760e01b815260040160405180910390fd5b600061066060608601866125cf565b61066e916004908290612615565b81019061067b9190612094565b9050610693600080516020612c6c8339815191525490565b61069c82610df5565b146106ba5760405163278328b160e21b815260040160405180910390fd5b600080866020013590508060601c915060008360a001516001600160a01b03168460c001516040516024016106ef9190612677565b60408051601f19818403018152918152602080830180516001600160e01b0316633cd56b0760e11b1790529051610729929133910161268a565b60408051601f1981840301815290829052610743916126bc565b6000604051808303816000865af19150503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b50509050806107a75760405163c3d40f7760e01b815260040160405180910390fd5b60c084015151600090815b818110156108c95760008760c0015182815181106107d2576107d26126d8565b6020026020010151600001519050806001600160a01b0316636d61fe708960c001518481518110610805576108056126d8565b6020026020010151602001516040518263ffffffff1660e01b815260040161082d91906121c2565b600060405180830381600087803b15801561084757600080fd5b505af115801561085b573d6000803e3d6000fd5b505060408051600181526001600160a01b03851660208201527fd21d0b289f126c4b473ea641963e766833c2f13866e4ff480abd787c100ef123935001905060405180910390a1866001600160a01b0316816001600160a01b0316036108c057600193505b506001016107b2565b50811561094857604051639700320360e01b81526001600160a01b038616906397003203906108fe908d908d906004016127ce565b6020604051808303816000875af115801561091d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094191906127f0565b965061096f565b6000806000610957898e6113cc565b92509250925061096983158383611542565b99505050505b8715610981576000806000808b335af1505b5050505050509392505050565b6000547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116146109dd576040516308e3edd160e41b815260040160405180910390fd5b60006109f5600080516020612c6c8339815191525490565b14610a135760405163d4d496e560e01b815260040160405180910390fd5b610a2984600080516020612c6c83398151915255565b6001600160a01b03831615610ab8576000836001600160a01b03168383604051610a54929190612809565b600060405180830381855af49150503d8060008114610a8f576040519150601f19603f3d011682016040523d82523d6000602084013e610a94565b606091505b5050905080610ab657604051631f57fed560e31b815260040160405180910390fd5b505b50505050565b6060600080823682610ad46101008901896125cf565b9092509050610ae7600660008385612615565b610af091612819565b60d01c9450610b03600c60068385612615565b610b0c91612819565b60d01c9350610b1e81600c8185612615565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604080516101c081019091527fc03dfc11d8b10bf9cf703d558958c8c42777f785d998c62060d85a4f0ef6ea7f815294975095509293505060208084019250610b9a91508a018a61284f565b6001600160a01b0316815260200188602001358152602001888060400190610bc291906125cf565b604051610bd0929190612809565b6040519081900390208152602001610beb60608a018a6125cf565b604051610bf9929190612809565b60405180910390208152602001610c0f8961157a565b6001600160801b03168152602001610c2689611590565b6001600160801b031681526020018860a001358152602001610c47896115a5565b6001600160801b03168152602001610c5e896115b4565b6001600160801b03168152602001610c7960e08a018a6125cf565b604051610c87929190612809565b6040805191829003909120825265ffffffffffff80881660208401528616908201526001600160a01b0388166060909101526101c08120909150601960f81b600160f81b610cd3611373565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529550505092959194509250565b6000818051906020012083604051602001610d40929190918252602082015260400190565b60405160208183030381529060405280519060200120925060ff60f81b858486896001600160a01b0316604051602001610d7b92919061286c565b60405160208183030381529060405280519060200120604051602001610dd394939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098610e2a98909796910161288e565b604051602081830303815290604052805190602001209050919050565b600081600881901b6001600160f81b03198216600160f81b03610e6d5760019250610ea9565b6001600160f81b03198216610e855760019250610ea9565b6001600160f81b031980831603610e9f5760019250610ea9565b5060009392505050565b828015610ebe57506001600160f81b03198116155b15610eca575050919050565b828015610ee457506001600160f81b03198116600160f81b145b15610e9f575050919050565b60405163610b592560e01b81526001600160a01b038d166004820152309063610b592590602401600060405180830381600087803b158015610f3157600080fd5b505af1158015610f45573d6000803e3d6000fd5b505060405163f08a032360e01b81526001600160a01b038f16600482015230925063f08a03239150602401600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b50505050306001600160a01b031663540fb4f98c8c8c8c8c8c8c8c60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020018e8e8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060ff8d166020909101526040516001600160e01b031960e08c901b16815261105c9998979695949392919060040161290b565b600060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b50505050505050505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110e557604051632039d3c960e01b815260040160405180910390fd5b6110f2602082018261284f565b600080546001600160a01b0319166001600160a01b039283161790557f000000000000000000000000000000000000000000000000000000000000000016611140608083016060840161284f565b6001600160a01b03161461116757604051633007073760e01b815260040160405180910390fd5b6302b994c760e31b61117c60808301836125cf565b61118b91600491600091612615565b6111949161263f565b6001600160e01b031916146111bc57604051633007073760e01b815260040160405180910390fd5b3063b63e800d6111cf6020840184612980565b60408501356111e4608087016060880161284f565b6111f160808801886125cf565b61120160c08a0160a08b0161284f565b60008060006040518b63ffffffff1660e01b815260040161122b9a999897969594939291906129c9565b600060405180830381600087803b15801561124557600080fd5b505af1158015611259573d6000803e3d6000fd5b50506000600080516020612c6c83398151915255506112759050565b60008061128860c0840160a0850161284f565b6001600160a01b031661129e60e08501856125cf565b306040516020016112b193929190612a80565b60408051601f19818403018152908290526112cb916126bc565b6000604051808303816000865af19150503d8060008114611308576040519150601f19603f3d011682016040523d82523d6000602084013e61130d565b606091505b50915091508161131f57805160208201fd5b505050565b60006001820361133657506001919050565b6002820361134657506001919050565b6003820361135657506001919050565b6004820361136657506001919050565b506000919050565b919050565b604080517f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692186020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b60008060006060808660a001516001600160a01b03166355d559f4877f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611426929190612aa1565b600060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261146b9190810190612b2e565b8351602085012060408c01519298509296509294509192509060009061149490839085906115c9565b905061149f816118c1565b60208901516114ad816118c1565b6114b6816118cd565b80516000805b8281101561152e5760006114f28583815181106114db576114db6126d8565b6020026020010151876118d690919063ffffffff16565b5090508015611525578261150581612bcc565b9350508d6040015183106115255760019b5050505050505050505061153b565b506001016114bc565b5060009950505050505050505b9250925092565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561156a57600061156d565b60015b60ff161717949350505050565b600061158a826080013560801c90565b92915050565b60006001600160801b0360808301351661158a565b600060c082013560801c61158a565b60006001600160801b0360c08301351661158a565b606060006115d8836041612be5565b8451909150836001600160401b038111156115f5576115f5611d86565b60405190808252806020026020018201604052801561161e578160200160208202803683370190505b5092508181101561164257604051638baa579f60e01b815260040160405180910390fd5b60005b848110156118b7576000806000806116758a86604102016020810151604082015160609092015160001a92909190565b9250925092508260ff16600003611816579092508290611696896041612be5565b8110156116cc576040516338a245ff60e11b81526004810182905260006024820181905260448201526064015b60405180910390fd5b856116d8826020612bfc565b1115611708576040516338a245ff60e11b81526004810182905260006024820152604481018790526064016116c3565b6020818b018101519087908290611720908590612bfc565b61172a9190612bfc565b111561175a576040516338a245ff60e11b81526004810183905260248101829052604481018890526064016116c3565b60606020838d01019050631626ba7e60e01b6001600160e01b031916866001600160a01b0316631626ba7e8f846040518363ffffffff1660e01b81526004016117a4929190612c0f565b602060405180830381865afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e59190612c28565b6001600160e01b0319161461180f578060405163605d348960e01b81526004016116c391906121c2565b505061187c565b601e8360ff16111561186d576118666118548c6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b61185f600486612c52565b84846118f9565b935061187c565b6118798b8484846118f9565b93505b8388868151811061188f5761188f6126d8565b6001600160a01b03909216602092830291909101909101525050600190920191506116459050565b5050509392505050565b6118ca81611937565b50565b6118ca8161198c565b6000806118ee84846001600160a01b031660006119d5565b909590945092505050565b60006040518560005260ff85166020528360405282606052602060406080600060015afa5060006060523d6060185191508060405250949350505050565b8051600082528060051b82016020601f198185015b8201838111611984578051828201805182811161196b5750505061194c565b5b818601528301805182811161196c575084015261194c565b505050915250565b60028151106118ca576020810160408201600183510160051b83015b81518351146119bc57602083019250815183525b6020820191508082036119a857505081900360051c9052565b60008060001960018651600087870197505b81830160011c94508460051b8901518701905087811482841117611a2157808811611a165783850191506119e7565b6001850192506119e7565b84151597148716989290930190950295509350505050565b6001600160a01b03811681146118ca57600080fd5b803561136e81611a39565b60008083601f840112611a6b57600080fd5b5081356001600160401b03811115611a8257600080fd5b6020830191508360208260051b8501011115611a9d57600080fd5b9250929050565b803560ff8116811461136e57600080fd5b60008060008060008060008060008060c08b8d031215611ad457600080fd5b611add8b611a4e565b995060208b01356001600160401b03811115611af857600080fd5b611b048d828e01611a59565b909a5098505060408b01356001600160401b03811115611b2357600080fd5b611b2f8d828e01611a59565b90985096505060608b01356001600160401b03811115611b4e57600080fd5b611b5a8d828e01611a59565b90965094505060808b01356001600160401b03811115611b7957600080fd5b611b858d828e01611a59565b9094509250611b98905060a08c01611aa4565b90509295989b9194979a5092959850565b60006101208284031215611bbc57600080fd5b50919050565b600080600060608486031215611bd757600080fd5b83356001600160401b03811115611bed57600080fd5b611bf986828701611ba9565b9660208601359650604090950135949350505050565b60008060008060608587031215611c2557600080fd5b843593506020850135611c3781611a39565b925060408501356001600160401b03811115611c5257600080fd5b8501601f81018713611c6357600080fd5b80356001600160401b03811115611c7957600080fd5b876020828401011115611c8b57600080fd5b949793965060200194505050565b60008060408385031215611cac57600080fd5b82356001600160401b03811115611cc257600080fd5b611cce85828601611ba9565b9250506020830135611cdf81611a39565b809150509250929050565b60005b83811015611d05578181015183820152602001611ced565b50506000910152565b60008151808452611d26816020860160208601611cea565b601f01601f19169290920160200192915050565b608081526000611d4d6080830187611d0e565b65ffffffffffff8616602084015265ffffffffffff851660408401528281036060840152611d7b8185611d0e565b979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611dbe57611dbe611d86565b60405290565b60405161010081016001600160401b0381118282101715611dbe57611dbe611d86565b604051601f8201601f191681016001600160401b0381118282101715611e0f57611e0f611d86565b604052919050565b60006001600160401b03821115611e3057611e30611d86565b50601f01601f191660200190565b600082601f830112611e4f57600080fd5b8135611e62611e5d82611e17565b611de7565b818152846020838601011115611e7757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611eac57600080fd5b8535611eb781611a39565b94506020860135611ec781611a39565b935060408601356001600160401b03811115611ee257600080fd5b611eee88828901611e3e565b9350506060860135915060808601356001600160401b03811115611f1157600080fd5b611f1d88828901611e3e565b9150509295509295909350565b60006001600160401b03821115611f4357611f43611d86565b5060051b60200190565b600082601f830112611f5e57600080fd5b8135611f6c611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611f8e57600080fd5b602085015b83811015611fb4578035611fa681611a39565b835260209283019201611f93565b5095945050505050565b600082601f830112611fcf57600080fd5b8135611fdd611e5d82611f2a565b8082825260208201915060208360051b860101925085831115611fff57600080fd5b602085015b83811015611fb45780356001600160401b0381111561202257600080fd5b86016040818903601f1901121561203857600080fd5b612040611d9c565b602082013561204e81611a39565b815260408201356001600160401b0381111561206957600080fd5b6120788a602083860101611e3e565b6020830152508085525050602083019250602081019050612004565b6000602082840312156120a657600080fd5b81356001600160401b038111156120bc57600080fd5b820161010081850312156120cf57600080fd5b6120d7611dc4565b6120e082611a4e565b815260208201356001600160401b038111156120fb57600080fd5b61210786828501611f4d565b6020830152506040828101359082015261212360608301611a4e565b606082015260808201356001600160401b0381111561214157600080fd5b61214d86828501611e3e565b60808301525061215f60a08301611a4e565b60a082015260c08201356001600160401b0381111561217d57600080fd5b61218986828501611fbe565b60c08301525060e08201356001600160401b038111156121a857600080fd5b6121b486828501611e3e565b60e083015250949350505050565b6020815260006121d56020830184611d0e565b9392505050565b6000602082840312156121ee57600080fd5b5035919050565b60008060008060008060008060008060008060e08d8f03121561221757600080fd5b6122208d611a4e565b9b506001600160401b0360208e0135111561223a57600080fd5b61224a8e60208f01358f01611a59565b909b5099506001600160401b0360408e0135111561226757600080fd5b6122778e60408f01358f01611a59565b90995097506001600160401b0360608e0135111561229457600080fd5b6122a48e60608f01358f01611a59565b90975095506001600160401b0360808e013511156122c157600080fd5b6122d18e60808f01358f01611a59565b90955093506001600160401b0360a08e013511156122ee57600080fd5b6122fe8e60a08f01358f01611a59565b909350915061230f60c08e01611aa4565b90509295989b509295989b509295989b565b60006020828403121561233357600080fd5b81356001600160401b0381111561234957600080fd5b820161010081850312156121d557600080fd5b600082825180855260208501945060208160051b8301016020850160005b838110156123cc57848303601f19018852815180516001600160a01b031684526020908101516040918501829052906123b590850182611d0e565b6020998a019990945092909201915060010161237a565b50909695505050505050565b6000808335601e198436030181126123ef57600080fd5b83016020810192503590506001600160401b0381111561240e57600080fd5b803603821315611a9d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008383855260208501945060208460051b8201018360005b868110156123cc57838303601f19018852813536879003603e1901811261248557600080fd5b8601803561249281611a39565b6001600160a01b031684526124aa60208201826123d8565b9150604060208601526124c160408601838361241d565b60209a8b019a9095509390930192505060010161245f565b600081518084526020840193506020830160005b828110156125145781516001600160a01b03168652602095860195909101906001016124ed565b5093949350505050565b60018060a01b038151168252600060208201516060602085015261254560608501826124d9565b60409384015160ff16949093019390935250919050565b60a08152600061256f60a083018b61235c565b8281036020840152612582818a8c612446565b9050828103604084015261259781888a612446565b905082810360608401526125ac818688612446565b905082810360808401526125c0818561251e565b9b9a5050505050505050505050565b6000808335601e198436030181126125e657600080fd5b8301803591506001600160401b0382111561260057600080fd5b602001915036819003821315611a9d57600080fd5b6000808585111561262557600080fd5b8386111561263257600080fd5b5050820193919092039150565b80356001600160e01b03198116906004841015612670576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6020815260006121d5602083018461235c565b6000835161269c818460208801611cea565b60609390931b6001600160601b0319169190920190815260140192915050565b600082516126ce818460208701611cea565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b612708826126fb83611a4e565b6001600160a01b03169052565b60208181013590830152600061272160408301836123d8565b61012060408601526127386101208601828461241d565b91505061274860608401846123d8565b858303606087015261275b83828461241d565b6080868101359088015260a0808701359088015260c08087013590880152925061278b91505060e08401846123d8565b85830360e087015261279e83828461241d565b925050506127b06101008401846123d8565b8583036101008701526127c483828461241d565b9695505050505050565b6040815260006127e160408301856126ee565b90508260208301529392505050565b60006020828403121561280257600080fd5b5051919050565b8183823760009101908152919050565b80356001600160d01b03198116906006841015612670576001600160d01b031960069490940360031b84901b1690921692915050565b60006020828403121561286157600080fd5b81356121d581611a39565b6000835161287e818460208801611cea565b9190910191825250602001919050565b6001600160a01b038816815260e0602082018190526000906128b2908301896124d9565b604083018890526001600160a01b038716606084015282810360808401526128da8187611d0e565b6001600160a01b03861660a085015283810360c085015290506128fd818561235c565b9a9950505050505050505050565b60a08152600061291f60a083018b8d612446565b8281036020840152612932818a8c612446565b9050828103604084015261294781888a612446565b9050828103606084015261295c818688612446565b90508281036080840152612970818561251e565b9c9b505050505050505050505050565b6000808335601e1984360301811261299757600080fd5b8301803591506001600160401b038211156129b157600080fd5b6020019150600581901b3603821315611a9d57600080fd5b61010080825281018a905260008b6101208301825b8d811015612a0e5782356129f181611a39565b6001600160a01b03168252602092830192909101906001016129de565b508b6020850152612a2a604085018c6001600160a01b03169052565b8381036060850152612a3d818a8c61241d565b92505050612a5660808301876001600160a01b03169052565b6001600160a01b03851660a08301528360c08301526125c060e08301846001600160a01b03169052565b8284823760609190911b6001600160601b0319169101908152601401919050565b604081526000612ab460408301856126ee565b905060018060a01b03831660208301529392505050565b600082601f830112612adc57600080fd5b8151612aea611e5d82611e17565b818152846020838601011115612aff57600080fd5b612b10826020830160208701611cea565b949350505050565b805165ffffffffffff8116811461136e57600080fd5b60008060008060808587031215612b4457600080fd5b84516001600160401b03811115612b5a57600080fd5b612b6687828801612acb565b945050612b7560208601612b18565b9250612b8360408601612b18565b915060608501516001600160401b03811115612b9e57600080fd5b612baa87828801612acb565b91505092959194509250565b634e487b7160e01b600052601160045260246000fd5b600060018201612bde57612bde612bb6565b5060010190565b808202811582820484141761158a5761158a612bb6565b8082018082111561158a5761158a612bb6565b828152604060208201526000612b106040830184611d0e565b600060208284031215612c3a57600080fd5b81516001600160e01b0319811681146121d557600080fd5b60ff828116828216039081111561158a5761158a612bb656fe982e06ee6a56dfc0f1ac189a5d23506361ca0a3ce45a9c7b8d33d65d43746a24a2646970667358221220b8570cdd622e1fbbf9414238ac24ec7629c0bf87595f396efe2bec7415eff9ce64736f6c634300081a0033", + "sourceMap": "1487:15193:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2996:9;;3009:4;-1:-1:-1;;;;;2996:17:114;;;:9;;:17;2992:41;;3022:11;;-1:-1:-1;;;3022:11:114;;;;;;;;;;;2992:41;1487:15193;;;;;2298:34;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;196:32:153;;;178:51;;166:2;151:18;2298:34:114;;;;;;;;2247:45;;;;;;;;;;;;;;;3486:655;;;;;;;;;;-1:-1:-1;3486:655:114;;;;;:::i;:::-;;:::i;7367:3339::-;;;;;;;;;;-1:-1:-1;7367:3339:114;;;;;:::i;:::-;;:::i;:::-;;;4073:25:153;;;4061:2;4046:18;7367:3339:114;3927:177:153;14600:210:114;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;14773:21:114;14600:210;;5403:552;;;;;;;;;;-1:-1:-1;5403:552:114;;;;;:::i;:::-;;:::i;976:3275:120:-;;;;;;;;;;-1:-1:-1;976:3275:120;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;15307:892:114:-;;;;;;;;;;-1:-1:-1;15307:892:114;;;;;:::i;:::-;;:::i;16312:366::-;;;;;;;;;;-1:-1:-1;16312:366:114;;;;;:::i;:::-;;:::i;541:135:122:-;;;;;;;;;;-1:-1:-1;634:35:122;;;;;;;;;;;;;;;;541:135;;;;634:35;541:135;:::i;682:712::-;;;;;;;;;;-1:-1:-1;682:712:122;;;;;:::i;:::-;;:::i;:::-;;;13712:14:153;;13705:22;13687:41;;13675:2;13660:18;682:712:122;13547:187:153;4259:719:114;;;;;;;;;;-1:-1:-1;4259:719:114;;;;;:::i;:::-;;:::i;12839:1710::-;;;;;;;;;;-1:-1:-1;12839:1710:114;;;;;:::i;:::-;;:::i;1400:373:122:-;;;;;;;;;;-1:-1:-1;1400:373:122;;;;;:::i;:::-;;:::i;4257:150:120:-;;;;;;;;;;;;;:::i;3486:655:114:-;2883:10;2905:4;2883:27;2879:58;;2919:18;;-1:-1:-1;;;2919:18:114;;;;;;;;;;;2879:58;3780:43:::1;::::0;-1:-1:-1;;;3780:43:114;;-1:-1:-1;;;;;196:32:153;;3780:43:114::1;::::0;::::1;178:51:153::0;3794:4:114::1;::::0;3780:33:::1;::::0;151:18:153;;3780:43:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3902:19:114::1;::::0;;3919:1:::1;3902:19:::0;;;::::1;::::0;::::1;::::0;;;3851:4:::1;::::0;-1:-1:-1;3833:42:114::1;::::0;-1:-1:-1;3902:19:114;::::1;::::0;::::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;3902:19:114::1;;;;;;;;;;;;;;;;3946:9;;3980;;4010:5;;4043:80;;;;;;;;4068:8;-1:-1:-1::0;;;;;4043:80:114::1;;;;;4089:9;;4043:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;4043:80:114;;;-1:-1:-1;4043:80:114::1;::::0;::::1;;::::0;;::::1;::::0;3833:301:::1;::::0;-1:-1:-1;;;;;;3833:301:114::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3486:655:::0;;;;;;;;;;:::o;7367:3339::-;7623:22;2996:9;;3009:4;-1:-1:-1;;;;;2996:17:114;;;:9;;:17;2992:41;;3022:11;;-1:-1:-1;;;3022:11:114;;;;;;;;;;;2992:41;3106:10:::1;-1:-1:-1::0;;;;;3120:20:114::1;3106:34;;3102:66;;3149:19;;-1:-1:-1::0;;;3149:19:114::1;;;;;;;;;;;3102:66;7699:15:::2;;::::0;::::2;:6:::0;:15:::2;:::i;:::-;:19;::::0;7716:1:::2;::::0;7699:19:::2;::::0;::::2;:::i;:::-;7692:27;::::0;::::2;:::i;:::-;-1:-1:-1::0;;;;;;7665:54:114::2;-1:-1:-1::0;;;7665:54:114::2;7661:118;;7742:26;;-1:-1:-1::0;;;7742:26:114::2;;;;;;;;;;;7661:118;7789:24;7827:15;;::::0;::::2;:6:::0;:15:::2;:::i;:::-;:19;::::0;7843:1:::2;::::0;7827:19;;::::2;:::i;:::-;7816:43;;;;;;;:::i;:::-;7789:70;;7989:13;-1:-1:-1::0;;;;;;;;;;;14773:21:114;;14600:210;7989:13:::2;7971:14;7976:8;7971:4;:14::i;:::-;:31;7967:61;;8011:17;;-1:-1:-1::0;;;8011:17:114::2;;;;;;;;;;;7967:61;8084:17;8111:13:::0;8127:6:::2;:12;;;8111:28;;8249:5;8245:2;8241:14;8228:27;;8620:12;8645:8;:17;;;-1:-1:-1::0;;;;;8637:31:114::2;8775:8;:19;;;8716:80;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;8716:80:114;;::::2;::::0;;;;;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;8716:80:114::2;-1:-1:-1::0;;;8716:80:114::2;::::0;;8682:196;;::::2;::::0;8716:80;8828:10:::2;::::0;8682:196:::2;;:::i;:::-;;::::0;;-1:-1:-1;;8682:196:114;;::::2;::::0;;;;;;;8637:251:::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8619:269;;;8951:7;8946:47;;8967:26;;-1:-1:-1::0;;;8967:26:114::2;;;;;;;;;;;8946:47;9297:19;::::0;::::2;::::0;:26;9231:29:::2;::::0;;9333:361:::2;9353:16;9349:1;:20;9333:361;;;9390:23;9416:8;:19;;;9436:1;9416:22;;;;;;;;:::i;:::-;;;;;;;:29;;;9390:55;;9470:15;-1:-1:-1::0;;;;;9459:37:114::2;;9497:8;:19;;;9517:1;9497:22;;;;;;;;:::i;:::-;;;;;;;:31;;;9459:70;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;9548:55:114::2;::::0;;276:1:76::2;24290:25:153::0;;-1:-1:-1;;;;;24351:32:153;;24346:2;24331:18;;24324:60;9548:55:114::2;::::0;-1:-1:-1;24263:18:153;;-1:-1:-1;9548:55:114::2;;;;;;;9641:9;-1:-1:-1::0;;;;;9622:28:114::2;:15;-1:-1:-1::0;;;;;9622:28:114::2;::::0;9618:65:::2;;9679:4;9652:31;;9618:65;-1:-1:-1::0;9371:3:114::2;;9333:361;;;;9825:24;9821:602;;;9946:56;::::0;-1:-1:-1;;;9946:56:114;;-1:-1:-1;;;;;9946:36:114;::::2;::::0;::::2;::::0;:56:::2;::::0;9983:6;;9991:10;;9946:56:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9929:73;;9821:602;;;10119:13;10134:17:::0;10153::::2;10190:37;10210:8;10220:6;10190:19;:37::i;:::-;10118:109;;;;;;10259:153;10309:8;10308:9;10347:10;10387;10259:19;:153::i;:::-;10242:170;;10019:404;;;9821:602;10475:23:::0;;10471:229:::2;;10673:1;10670::::0;10667::::2;10664::::0;10643:19:::2;10633:8;10626:5;10621:54;10617:59;10471:229;7651:3055;;;;;;7367:3339:::0;;;;;:::o;5403:552::-;2996:9;;3009:4;-1:-1:-1;;;;;2996:17:114;;;:9;;:17;2992:41;;3022:11;;-1:-1:-1;;;3022:11:114;;;;;;;;;;;2992:41;5593:1:::1;5568:13;-1:-1:-1::0;;;;;;;;;;;14773:21:114;;14600:210;5568:13:::1;:27;5564:77;;5604:37;;-1:-1:-1::0;;;5604:37:114::1;;;;;;;;;;;5564:77;5679:22;5692:8;-1:-1:-1::0;;;;;;;;;;;15010:29:114;14859:196;5679:22:::1;-1:-1:-1::0;;;;;5803:16:114;::::1;::::0;5799:150:::1;;5836:12;5853:2;-1:-1:-1::0;;;;;5853:15:114::1;5869:7;;5853:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5835:42;;;5896:7;5891:47;;5912:26;;-1:-1:-1::0;;;5912:26:114::1;;;;;;;;;;;5891:47;5821:128;5799:150;5403:552:::0;;;;:::o;976:3275:120:-;1132:26;1172:17;;1132:26;1480:18;1172:17;1501:16;;;;:6;:16;:::i;:::-;1480:37;;-1:-1:-1;1480:37:120;-1:-1:-1;1558:8:120;1564:1;1562;1480:37;;1558:8;:::i;:::-;1551:16;;;:::i;:::-;1544:24;;;-1:-1:-1;1609:9:120;1615:2;1613:1;1609:3;;:9;:::i;:::-;1602:17;;;:::i;:::-;1595:25;;;-1:-1:-1;1647:8:120;:3;1651:2;1647:3;;:8;:::i;:::-;1634:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2706:830:120;;;;;;;;;193:66:128;2706:830:120;;1634:21;;-1:-1:-1;1634:21:120;-1:-1:-1;2706:830:120;;-1:-1:-1;;2706:830:120;;;;;-1:-1:-1;2794:13:120;;-1:-1:-1;2794:13:120;;:6;:13;:::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;2832:6;:12;;;2706:830;;;;2886:6;:15;;;;;;;;:::i;:::-;2876:26;;;;;;;:::i;:::-;;;;;;;;;2706:830;;;;2944:15;;;;:6;:15;:::i;:::-;2934:26;;;;;;;:::i;:::-;;;;;;;;2706:830;;;;3008:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3084:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3150:6;:25;;;2706:830;;;;3223:35;:6;:33;:35::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3299:27;:6;:25;:27::i;:::-;-1:-1:-1;;;;;2706:830:120;;;;;3377:23;;;;:6;:23;:::i;:::-;3367:34;;;;;;;:::i;:::-;;;;;;;;;;;2706:830;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2706:830:120;;;;;;;4089:3;4064:29;;2663:873;;-1:-1:-1;;;;;;;4198:17:120;:15;:17::i;:::-;4153:81;;-1:-1:-1;;;;;;27618:26:153;;;4153:81:120;;;27606:39:153;27674:26;;;;27661:11;;;27654:47;27717:11;;;27710:27;27753:12;;;27746:28;;;27790:12;;4153:81:120;;;;;;;;;;;;4121:113;;2185:2060;;976:3275;;;;;;;:::o;15307:892:114:-;15547:17;15624:18;15614:29;;;;;;15645:4;15597:53;;;;;;;;27970:19:153;;;28014:2;28005:12;;27998:28;28051:2;28042:12;;27813:247;15597:53:114;;;;;;;;;;;;;15587:64;;;;;;15580:71;;15837:4;15830:12;;15880:16;15927:4;16021:12;16059:9;-1:-1:-1;;;;;16035:36:114;16004:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15961:141;;;;;;15784:344;;;;;;;;;;-1:-1:-1;;;;;;28676:26:153;;;;28664:39;;28740:2;28736:15;;;;-1:-1:-1;;;;;;28732:53:153;28728:1;28719:11;;28712:74;28811:2;28802:12;;28795:28;28848:2;28839:12;;28832:28;28885:2;28876:12;;28453:441;15784:344:114;;;;-1:-1:-1;;15784:344:114;;;;;;;;;15749:401;;15784:344;15749:401;;;;;15307:892;-1:-1:-1;;;;;;15307:892:114:o;16312:366::-;16446:14;;16478:11;;;;;16507:14;;;;;16539:12;;;;16569:14;;;;16601:13;;;;16632:15;;;;16418:243;;16369:7;;16418:243;;16446:14;;16478:11;16632:15;16418:243;;:::i;:::-;;;;;;;;;;;;;16395:276;;;;;;16388:283;;16312:366;;;:::o;682:712:122:-;758:14;929:11;969:1;965:19;;;-1:-1:-1;;;;;;5542:40:131;;-1:-1:-1;;;5542:40:131;1003:209:122;;1047:4;1035:16;;1003:209;;;-1:-1:-1;;;;;;5542:40:131;;1066:146:122;;1111:4;1099:16;;1066:146;;;-1:-1:-1;;;;;;5542:40:131;;;;1130:82:122;;1181:4;1169:16;;1130:82;;;-1:-1:-1;1207:5:122;;682:712;-1:-1:-1;;;682:712:122:o;1130:82::-;1227:9;:41;;;;-1:-1:-1;;;;;;;5542:40:131;;;1240:28:122;1223:164;;;1270:16;;682:712;;;:::o;1223:164::-;1305:9;:37;;;;-1:-1:-1;;;;;;;5542:40:131;;-1:-1:-1;;;5542:40:131;1318:24:122;1301:86;;;1344:16;;682:712;;;:::o;4259:719:114:-;4567:43;;-1:-1:-1;;;4567:43:114;;-1:-1:-1;;;;;196:32:153;;4567:43:114;;;178:51:153;4581:4:114;;4567:33;;151:18:153;;4567:43:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4620:49:114;;-1:-1:-1;;;4620:49:114;;-1:-1:-1;;;;;196:32:153;;4620:49:114;;;178:51:153;4634:4:114;;-1:-1:-1;4620:39:114;;-1:-1:-1;151:18:153;;4620:49:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4697:4;-1:-1:-1;;;;;4679:42:114;;4748:10;;4783:9;;4817;;4847:5;;4880:80;;;;;;;;4905:8;-1:-1:-1;;;;;4880:80:114;;;;;4926:9;;4880:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4880:80:114;;;-1:-1:-1;4880:80:114;;;;;;;;4679:292;;-1:-1:-1;;;;;;4679:292:114;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4259:719;;;;;;;;;;;;:::o;12839:1710::-;3106:10;-1:-1:-1;;;;;3120:20:114;3106:34;;3102:66;;3149:19;;-1:-1:-1;;;3149:19:114;;;;;;;;;;;3102:66;13085:18:::1;;::::0;::::1;:8:::0;:18:::1;:::i;:::-;13061:21;:42:::0;;-1:-1:-1;;;;;;13061:42:114::1;-1:-1:-1::0;;;;;13061:42:114;;::::1;;::::0;;13182:4:::1;13162:24;:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;13162:24:114::1;;13158:51;;13195:14;;-1:-1:-1::0;;;13195:14:114::1;;;;;;;;;;;13158:51;-1:-1:-1::0;;;13294:18:114::1;;::::0;::::1;:8:::0;:18:::1;:::i;:::-;:22;::::0;13314:1:::1;::::0;13294:22:::1;::::0;::::1;:::i;:::-;13287:30;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;;13287:60:114::1;;13283:87;;13356:14;;-1:-1:-1::0;;;13356:14:114::1;;;;;;;;;;;13283:87;13423:4;13409:26;13459:15;;::::0;::::1;:8:::0;:15:::1;:::i;:::-;13500:18;::::0;::::1;;13536:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;13572:18;;::::0;::::1;:8:::0;:18:::1;:::i;:::-;13629:17;::::0;;;::::1;::::0;::::1;;:::i;:::-;13683:1;13708::::0;13756::::1;13409:361;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;13820:1:114::1;-1:-1:-1::0;;;;;;;;;;;15010:29:114;-1:-1:-1;13807:15:114::1;::::0;-1:-1:-1;14859:196:114;13807:15:::1;14052:12;::::0;14101:17:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;14093:31:114::1;14172:17;;::::0;::::1;:8:::0;:17:::1;:::i;:::-;14275:4;14138:182;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;14138:182:114;;::::1;::::0;;;;;;;14093:237:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14051:279;;;;14345:7;14340:203;;14507:10;14501:17;14494:4;14482:10;14478:21;14471:48;14340:203;12919:1630;;12839:1710:::0;:::o;1400:373:122:-;1469:4;276:1:76;1489:12:122;:37;1485:281;;-1:-1:-1;1535:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1485:281::-;319:1:76;1558:12:122;:36;1554:212;;-1:-1:-1;1603:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1554:212::-;362:1:76;1626:12:122;:36;1622:144;;-1:-1:-1;1671:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1622:144::-;401:1:76;1694:12:122;:32;1690:76;;-1:-1:-1;1735:4:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;-1:-1:-1;1761:5:122;;1400:373;-1:-1:-1;1400:373:122:o;1690:76::-;1400:373;;;:::o;4257:150:120:-;4341:58;;;420:66;4341:58;;;34265:25:153;4379:13:120;34306:18:153;;;34299:34;;;;4394:4:120;34349:18:153;;;34342:60;4305:7:120;;34238:18:153;;4341:58:120;;;;;;;;;;;;4331:69;;;;;;4324:76;;4257:150;:::o;10712:1353:114:-;10882:13;10897:17;10916;10949:26;10985:23;11146:17;:26;;;-1:-1:-1;;;;;11138:45:114;;11184:6;11192:20;11138:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11138:75:114;;;;;;;;;;;;:::i;:::-;11239:24;;;;;;11338:27;;;;11072:141;;-1:-1:-1;11072:141:114;;-1:-1:-1;11072:141:114;;-1:-1:-1;11072:141:114;;-1:-1:-1;11239:24:114;11223:13;;11301:65;;11239:24;;11072:141;;11301:24;:65::i;:::-;11274:92;;11376:23;:7;:21;:23::i;:::-;11436:24;;;;11551:22;11436:24;11551:20;:22::i;:::-;11583:23;:6;:21;:23::i;:::-;11640:13;;11617:20;;11691:320;11711:12;11707:1;:16;11691:320;;;11745:10;11760:31;11781:6;11788:1;11781:9;;;;;;;;:::i;:::-;;;;;;;11760:7;:20;;:31;;;;:::i;:::-;11744:47;;;11809:5;11805:196;;;11834:11;;;;:::i;:::-;;;;11880:17;:27;;;11867:9;:40;11863:124;;11939:4;11931:37;;;;;;;;;;;;;11863:124;-1:-1:-1;11725:3:114;;11691:320;;;;12028:5;12020:38;;;;;;;;;10712:1353;;;;;;:::o;2448:248:9:-;2559:7;2683:8;2667:10;2659:19;;:33;;2643:3;2628:10;2620:19;;:26;;2590:9;:17;;2606:1;2590:17;;;2602:1;2590:17;2589:58;;;:104;;2448:248;-1:-1:-1;;;;2448:248:9:o;3410:171:13:-;3510:7;3536:38;3550:6;:23;;;2887:3;2868:22;;2780:117;3536:38;3529:45;3410:171;-1:-1:-1;;3410:171:13:o;3587:162::-;3679:7;-1:-1:-1;;;;;3718:23:13;;;;3039:31;3705:37;2959:118;3083:162;3183:7;3223:14;;;;2887:3;2868:22;3209:29;2780:117;3251:153;3343:7;-1:-1:-1;;;;;3382:14:13;;;;3039:31;3369:28;2959:118;904:3530:27;1080:33;1129:31;1163:23;:18;1184:2;1163:23;:::i;:::-;1223:17;;1129:57;;-1:-1:-1;1283:18:27;-1:-1:-1;;;;;1269:33:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:33:27;;1250:52;;1335:23;1316:16;:42;1312:73;;;1367:18;;-1:-1:-1;;;1367:18:27;;;;;;;;;;;1312:73;1401:9;1396:3032;1416:18;1412:1;:22;1396:3032;;;1498:15;1528:7;1537:9;1548;1561:50;1590:10;1607:1;5504:4;5500:14;5538:40;5572:4;5538:40;;5532:47;5637:4;5603:40;;5597:47;5710:4;5676:40;;;5670:47;5313:7;5662:56;;5532:47;;5597;5182:552;1561:50;1527:84;;;;;;1630:1;:6;;1635:1;1630:6;1626:2749;;1876:1;;-1:-1:-1;1876:1:27;;2180:23;2185:18;2180:2;:23;:::i;:::-;2167:36;;2163:136;;;2234:46;;-1:-1:-1;;;2234:46:27;;;;;36850:25:153;;;2263:10:27;36891:18:153;;;36884:34;;;36934:18;;;36927:34;36823:18;;2234:46:27;;;;;;;;2163:136;2339:16;2321:15;2329:1;2334:2;2321:15;:::i;:::-;:34;2317:149;;;2386:61;;-1:-1:-1;;;2386:61:27;;;;;36850:25:153;;;2415:10:27;36891:18:153;;;36884:34;36934:18;;;36927:34;;;36823:18;;2386:61:27;36632:335:153;2317:149:27;2823:4;2803:18;;;2799:29;;2793:36;;2909:16;;2793:36;;2868:15;;2803:18;;2868:15;:::i;:::-;:38;;;;:::i;:::-;:57;2864:237;;;2956:126;;-1:-1:-1;;;2956:126:27;;;;;36850:25:153;;;36891:18;;;36884:34;;;36934:18;;;36927:34;;;36823:18;;2956:126:27;36632:335:153;2864:237:27;3154:30;3504:4;3500:1;3488:10;3484:18;3480:29;3459:50;;168:10;3671:19;;-1:-1:-1;;;;;3569:121:27;;3589:7;-1:-1:-1;;;;;3569:45:27;;3615:8;3625:17;3569:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3569:121:27;;3544:213;;3739:17;3716:41;;-1:-1:-1;;;3716:41:27;;;;;;;;:::i;3544:213::-;1638:2134;;1626:2749;;;3786:2;3782:1;:6;;;3778:597;;;4073:184;4118:38;4147:8;15824:4:105;15817:18;15904:50;15725:14;15891:64;16007:4;16001;15991:21;;15656:409;4118:38:27;4181:5;4185:1;4181;:5;:::i;:::-;4211:1;4237;4073:16;:184::i;:::-;4063:194;;3778:597;;;4306:54;4331:8;4344:1;4350;4356;4306:16;:54::i;:::-;4296:64;;3778:597;4410:7;4388:16;4405:1;4388:19;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4388:29:27;;;:19;;;;;;;;;;;:29;-1:-1:-1;;1436:3:27;;;;;-1:-1:-1;1396:3032:27;;-1:-1:-1;1396:3032:27;;;1119:3315;;904:3530;;;;;:::o;2083:100:107:-;2150:26;2173:1;2150:13;:26::i;:::-;2083:100;:::o;10119:102::-;10187:27;10211:1;10187:14;:27::i;11107:225::-;11212:10;;11270:55;11293:1;11313:6;-1:-1:-1;;;;;11297:24:107;11323:1;11270:13;:55::i;:::-;11253:72;;;;-1:-1:-1;11107:225:107;-1:-1:-1;;;11107:225:107:o;14080:1040:105:-;14192:14;14303:4;14297:11;14368:4;14362;14355:18;14406:4;14403:1;14399:12;14393:4;14386:26;14438:1;14432:4;14425:15;14466:1;14460:4;14453:15;14789:4;14743;14699;14654;14604:1;14534:5;14502:328;14481:363;14870:1;14864:4;14857:15;15022:16;15016:4;15012:27;15006:34;14996:44;;15066:1;15060:4;15053:15;;14080:1040;;;;;;:::o;776:1034:107:-;924:1;918:8;967:1;964;957:12;1054:1;1051;1047:9;1044:1;1040:17;1093:4;1123;1119:9;1163:1;1160;1156:9;1141:598;1196:9;;1225:8;;;1236:5;1222:21;1275:1;1269:8;1318:1;1315;1311:9;1389:1;1383:8;1445:1;1442;1439:8;1429:32;;1451:8;;;1141:598;;1429:32;1478:210;1519:9;;;1512:20;1558:9;;1612:8;;1651;;;1478:210;1641:29;-1:-1:-1;1712:9:107;;1705:20;1141:598;;;-1:-1:-1;;;1752:12:107;;-1:-1:-1;776:1034:107:o;9124:722::-;9336:1;9332;9326:8;9323:15;9313:517;;9374:4;9371:1;9367:12;9412:4;9409:1;9405:12;9473:1;9469;9463:8;9459:16;9456:1;9452:24;9449:1;9445:32;9494:277;9557:1;9551:8;9547:1;9541:8;9538:22;9528:143;;9600:4;9597:1;9593:12;9588:17;;9646:1;9640:8;9637:1;9630:19;9528:143;9704:4;9701:1;9697:12;9692:17;;9739:3;9736:1;9733:10;9494:277;9730:23;-1:-1:-1;;9805:9:107;;;9802:1;9798:17;9788:28;;9124:722::o;21300:1099::-;21421:10;21433:13;21541:1;21537:6;21565:1;21594;21588:8;21618:1;21660:6;21652;21648:19;21638:29;;21632:453;21716:1;21713;21709:9;21706:1;21702:17;21693:26;;21773:5;21770:1;21766:13;21763:1;21759:21;21753:28;21745:6;21741:41;21736:46;;21821:6;21818:1;21815:13;21811:1;21808;21805:8;21802:27;21832:5;21799:40;21945:1;21937:6;21934:13;21924:112;;21987:1;21980:5;21976:13;21971:18;;21632:453;;21924:112;22069:1;22062:5;22058:13;22053:18;;21632:453;;;22291:13;;22284:21;22253:13;;22370;;;22331;;;;22327:21;;;;-1:-1:-1;21300:1099:107;-1:-1:-1;;;;21300:1099:107:o;557:131:153:-;-1:-1:-1;;;;;632:31:153;;622:42;;612:70;;678:1;675;668:12;693:134;761:20;;790:31;761:20;790:31;:::i;832:386::-;914:8;924:6;978:3;971:4;963:6;959:17;955:27;945:55;;996:1;993;986:12;945:55;-1:-1:-1;1019:20:153;;-1:-1:-1;;;;;1051:30:153;;1048:50;;;1094:1;1091;1084:12;1048:50;1131:4;1123:6;1119:17;1107:29;;1191:3;1184:4;1174:6;1171:1;1167:14;1159:6;1155:27;1151:38;1148:47;1145:67;;;1208:1;1205;1198:12;1145:67;832:386;;;;;:::o;1223:156::-;1289:20;;1349:4;1338:16;;1328:27;;1318:55;;1369:1;1366;1359:12;1384:1746;1687:6;1695;1703;1711;1719;1727;1735;1743;1751;1759;1812:3;1800:9;1791:7;1787:23;1783:33;1780:53;;;1829:1;1826;1819:12;1780:53;1852:29;1871:9;1852:29;:::i;:::-;1842:39;;1932:2;1921:9;1917:18;1904:32;-1:-1:-1;;;;;1951:6:153;1948:30;1945:50;;;1991:1;1988;1981:12;1945:50;2030:89;2111:7;2102:6;2091:9;2087:22;2030:89;:::i;:::-;2138:8;;-1:-1:-1;2004:115:153;-1:-1:-1;;2226:2:153;2211:18;;2198:32;-1:-1:-1;;;;;2242:32:153;;2239:52;;;2287:1;2284;2277:12;2239:52;2326:91;2409:7;2398:8;2387:9;2383:24;2326:91;:::i;:::-;2436:8;;-1:-1:-1;2300:117:153;-1:-1:-1;;2524:2:153;2509:18;;2496:32;-1:-1:-1;;;;;2540:32:153;;2537:52;;;2585:1;2582;2575:12;2537:52;2624:91;2707:7;2696:8;2685:9;2681:24;2624:91;:::i;:::-;2734:8;;-1:-1:-1;2598:117:153;-1:-1:-1;;2822:3:153;2807:19;;2794:33;-1:-1:-1;;;;;2839:32:153;;2836:52;;;2884:1;2881;2874:12;2836:52;2923:91;3006:7;2995:8;2984:9;2980:24;2923:91;:::i;:::-;3033:8;;-1:-1:-1;2897:117:153;-1:-1:-1;3087:37:153;;-1:-1:-1;3119:3:153;3104:19;;3087:37;:::i;:::-;3077:47;;1384:1746;;;;;;;;;;;;;:::o;3135:168::-;3207:5;3252:3;3243:6;3238:3;3234:16;3230:26;3227:46;;;3269:1;3266;3259:12;3227:46;-1:-1:-1;3291:6:153;3135:168;-1:-1:-1;3135:168:153:o;3308:614::-;3424:6;3432;3440;3493:2;3481:9;3472:7;3468:23;3464:32;3461:52;;;3509:1;3506;3499:12;3461:52;3549:9;3536:23;-1:-1:-1;;;;;3574:6:153;3571:30;3568:50;;;3614:1;3611;3604:12;3568:50;3637:79;3708:7;3699:6;3688:9;3684:22;3637:79;:::i;:::-;3627:89;3785:2;3770:18;;3757:32;;-1:-1:-1;3886:2:153;3871:18;;;3858:32;;3308:614;-1:-1:-1;;;;3308:614:153:o;4291:841::-;4379:6;4387;4395;4403;4456:2;4444:9;4435:7;4431:23;4427:32;4424:52;;;4472:1;4469;4462:12;4424:52;4517:23;;;-1:-1:-1;4616:2:153;4601:18;;4588:32;4629:33;4588:32;4629:33;:::i;:::-;4681:7;-1:-1:-1;4739:2:153;4724:18;;4711:32;-1:-1:-1;;;;;4755:30:153;;4752:50;;;4798:1;4795;4788:12;4752:50;4821:22;;4874:4;4866:13;;4862:27;-1:-1:-1;4852:55:153;;4903:1;4900;4893:12;4852:55;4943:2;4930:16;-1:-1:-1;;;;;4961:6:153;4958:30;4955:50;;;5001:1;4998;4991:12;4955:50;5046:7;5041:2;5032:6;5028:2;5024:15;5020:24;5017:37;5014:57;;;5067:1;5064;5057:12;5014:57;4291:841;;;;-1:-1:-1;5098:2:153;5090:11;;-1:-1:-1;;;4291:841:153:o;5137:515::-;5244:6;5252;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5361:9;5348:23;-1:-1:-1;;;;;5386:6:153;5383:30;5380:50;;;5426:1;5423;5416:12;5380:50;5449:79;5520:7;5511:6;5500:9;5496:22;5449:79;:::i;:::-;5439:89;;;5578:2;5567:9;5563:18;5550:32;5591:31;5616:5;5591:31;:::i;:::-;5641:5;5631:15;;;5137:515;;;;;:::o;5657:250::-;5742:1;5752:113;5766:6;5763:1;5760:13;5752:113;;;5842:11;;;5836:18;5823:11;;;5816:39;5788:2;5781:10;5752:113;;;-1:-1:-1;;5899:1:153;5881:16;;5874:27;5657:250::o;5912:270::-;5953:3;5991:5;5985:12;6018:6;6013:3;6006:19;6034:76;6103:6;6096:4;6091:3;6087:14;6080:4;6073:5;6069:16;6034:76;:::i;:::-;6164:2;6143:15;-1:-1:-1;;6139:29:153;6130:39;;;;6171:4;6126:50;;5912:270;-1:-1:-1;;5912:270:153:o;6187:559::-;6432:3;6421:9;6414:22;6395:4;6459:45;6499:3;6488:9;6484:19;6476:6;6459:45;:::i;:::-;6552:14;6544:6;6540:27;6535:2;6524:9;6520:18;6513:55;6616:14;6608:6;6604:27;6599:2;6588:9;6584:18;6577:55;6680:9;6672:6;6668:22;6663:2;6652:9;6648:18;6641:50;6708:32;6733:6;6725;6708:32;:::i;:::-;6700:40;6187:559;-1:-1:-1;;;;;;;6187:559:153:o;6751:127::-;6812:10;6807:3;6803:20;6800:1;6793:31;6843:4;6840:1;6833:15;6867:4;6864:1;6857:15;6883:257;6955:4;6949:11;;;6987:17;;-1:-1:-1;;;;;7019:34:153;;7055:22;;;7016:62;7013:88;;;7081:18;;:::i;:::-;7117:4;7110:24;6883:257;:::o;7145:255::-;7217:2;7211:9;7259:6;7247:19;;-1:-1:-1;;;;;7281:34:153;;7317:22;;;7278:62;7275:88;;;7343:18;;:::i;7405:275::-;7476:2;7470:9;7541:2;7522:13;;-1:-1:-1;;7518:27:153;7506:40;;-1:-1:-1;;;;;7561:34:153;;7597:22;;;7558:62;7555:88;;;7623:18;;:::i;:::-;7659:2;7652:22;7405:275;;-1:-1:-1;7405:275:153:o;7685:186::-;7733:4;-1:-1:-1;;;;;7758:6:153;7755:30;7752:56;;;7788:18;;:::i;:::-;-1:-1:-1;7854:2:153;7833:15;-1:-1:-1;;7829:29:153;7860:4;7825:40;;7685:186::o;7876:486::-;7918:5;7971:3;7964:4;7956:6;7952:17;7948:27;7938:55;;7989:1;7986;7979:12;7938:55;8029:6;8016:20;8060:52;8076:35;8104:6;8076:35;:::i;:::-;8060:52;:::i;:::-;8137:6;8128:7;8121:23;8191:3;8184:4;8175:6;8167;8163:19;8159:30;8156:39;8153:59;;;8208:1;8205;8198:12;8153:59;8273:6;8266:4;8258:6;8254:17;8247:4;8238:7;8234:18;8221:59;8329:1;8300:20;;;8322:4;8296:31;8289:42;;;;8304:7;7876:486;-1:-1:-1;;;7876:486:153:o;8367:932::-;8480:6;8488;8496;8504;8512;8565:3;8553:9;8544:7;8540:23;8536:33;8533:53;;;8582:1;8579;8572:12;8533:53;8621:9;8608:23;8640:31;8665:5;8640:31;:::i;:::-;8690:5;-1:-1:-1;8747:2:153;8732:18;;8719:32;8760:33;8719:32;8760:33;:::i;:::-;8812:7;-1:-1:-1;8870:2:153;8855:18;;8842:32;-1:-1:-1;;;;;8886:30:153;;8883:50;;;8929:1;8926;8919:12;8883:50;8952:49;8993:7;8984:6;8973:9;8969:22;8952:49;:::i;:::-;8942:59;-1:-1:-1;;9074:2:153;9059:18;;9046:32;;-1:-1:-1;9157:3:153;9142:19;;9129:33;-1:-1:-1;;;;;9174:32:153;;9171:52;;;9219:1;9216;9209:12;9171:52;9242:51;9285:7;9274:8;9263:9;9259:24;9242:51;:::i;:::-;9232:61;;;8367:932;;;;;;;;:::o;9304:183::-;9364:4;-1:-1:-1;;;;;9389:6:153;9386:30;9383:56;;;9419:18;;:::i;:::-;-1:-1:-1;9464:1:153;9460:14;9476:4;9456:25;;9304:183::o;9492:744::-;9546:5;9599:3;9592:4;9584:6;9580:17;9576:27;9566:55;;9617:1;9614;9607:12;9566:55;9657:6;9644:20;9684:64;9700:47;9740:6;9700:47;:::i;9684:64::-;9772:3;9796:6;9791:3;9784:19;9828:4;9823:3;9819:14;9812:21;;9889:4;9879:6;9876:1;9872:14;9864:6;9860:27;9856:38;9842:52;;9917:3;9909:6;9906:15;9903:35;;;9934:1;9931;9924:12;9903:35;9970:4;9962:6;9958:17;9984:221;10000:6;9995:3;9992:15;9984:221;;;10082:3;10069:17;10099:31;10124:5;10099:31;:::i;:::-;10143:18;;10190:4;10181:14;;;;10017;9984:221;;;-1:-1:-1;10223:7:153;9492:744;-1:-1:-1;;;;;9492:744:153:o;10241:1296::-;10305:5;10358:3;10351:4;10343:6;10339:17;10335:27;10325:55;;10376:1;10373;10366:12;10325:55;10416:6;10403:20;10443:64;10459:47;10499:6;10459:47;:::i;10443:64::-;10531:3;10555:6;10550:3;10543:19;10587:4;10582:3;10578:14;10571:21;;10648:4;10638:6;10635:1;10631:14;10623:6;10619:27;10615:38;10601:52;;10676:3;10668:6;10665:15;10662:35;;;10693:1;10690;10683:12;10662:35;10729:4;10721:6;10717:17;10743:763;10759:6;10754:3;10751:15;10743:763;;;10847:3;10834:17;-1:-1:-1;;;;;10870:11:153;10867:35;10864:55;;;10915:1;10912;10905:12;10864:55;10942:24;;11014:4;10990:12;;;-1:-1:-1;;10986:26:153;10982:37;10979:57;;;11032:1;11029;11022:12;10979:57;11062:22;;:::i;:::-;11133:4;11129:2;11125:13;11112:27;11152:33;11177:7;11152:33;:::i;:::-;11198:22;;11270:4;11262:13;;11249:27;-1:-1:-1;;;;;11292:32:153;;11289:52;;;11337:1;11334;11327:12;11289:52;11379:51;11426:3;11419:4;11408:8;11404:2;11400:17;11396:28;11379:51;:::i;:::-;11372:4;11365:5;11361:16;11354:77;;11456:5;11451:3;11444:18;;;11491:4;11486:3;11482:14;11475:21;;10785:4;10780:3;10776:14;10769:21;;10743:763;;11542:1515;11628:6;11681:2;11669:9;11660:7;11656:23;11652:32;11649:52;;;11697:1;11694;11687:12;11649:52;11737:9;11724:23;-1:-1:-1;;;;;11762:6:153;11759:30;11756:50;;;11802:1;11799;11792:12;11756:50;11825:22;;11881:6;11863:16;;;11859:29;11856:49;;;11901:1;11898;11891:12;11856:49;11927:22;;:::i;:::-;11972;11991:2;11972:22;:::i;:::-;11965:5;11958:37;12041:2;12037;12033:11;12020:25;-1:-1:-1;;;;;12060:8:153;12057:32;12054:52;;;12102:1;12099;12092:12;12054:52;12138:56;12186:7;12175:8;12171:2;12167:17;12138:56;:::i;:::-;12133:2;12122:14;;12115:80;-1:-1:-1;12261:2:153;12253:11;;;12240:25;12281:14;;;12274:31;12337;12364:2;12356:11;;12337:31;:::i;:::-;12332:2;12325:5;12321:14;12314:55;12415:3;12411:2;12407:12;12394:26;-1:-1:-1;;;;;12435:8:153;12432:32;12429:52;;;12477:1;12474;12467:12;12429:52;12514:44;12550:7;12539:8;12535:2;12531:17;12514:44;:::i;:::-;12508:3;12501:5;12497:15;12490:69;;12592:32;12619:3;12615:2;12611:12;12592:32;:::i;:::-;12586:3;12579:5;12575:15;12568:57;12671:3;12667:2;12663:12;12650:26;-1:-1:-1;;;;;12691:8:153;12688:32;12685:52;;;12733:1;12730;12723:12;12685:52;12770:66;12828:7;12817:8;12813:2;12809:17;12770:66;:::i;:::-;12764:3;12757:5;12753:15;12746:91;;12883:3;12879:2;12875:12;12862:26;-1:-1:-1;;;;;12903:8:153;12900:32;12897:52;;;12945:1;12942;12935:12;12897:52;12982:44;13018:7;13007:8;13003:2;12999:17;12982:44;:::i;:::-;12976:3;12965:15;;12958:69;-1:-1:-1;12969:5:153;11542:1515;-1:-1:-1;;;;11542:1515:153:o;13062:219::-;13211:2;13200:9;13193:21;13174:4;13231:44;13271:2;13260:9;13256:18;13248:6;13231:44;:::i;:::-;13223:52;13062:219;-1:-1:-1;;;13062:219:153:o;13286:256::-;13375:6;13428:2;13416:9;13407:7;13403:23;13399:32;13396:52;;;13444:1;13441;13434:12;13396:52;-1:-1:-1;13489:23:153;;13286:256;-1:-1:-1;13286:256:153:o;13739:2097::-;14109:6;14117;14125;14133;14141;14149;14157;14165;14173;14181;14189:7;14198;14252:3;14240:9;14231:7;14227:23;14223:33;14220:53;;;14269:1;14266;14259:12;14220:53;14292:29;14311:9;14292:29;:::i;:::-;14282:39;;-1:-1:-1;;;;;14364:2:153;14353:9;14349:18;14336:32;14333:56;14330:76;;;14402:1;14399;14392:12;14330:76;14441:115;14548:7;14541:2;14530:9;14526:18;14513:32;14502:9;14498:48;14441:115;:::i;:::-;14575:8;;-1:-1:-1;14602:8:153;-1:-1:-1;;;;;;14653:2:153;14638:18;;14625:32;14622:56;14619:76;;;14691:1;14688;14681:12;14619:76;14730:115;14837:7;14830:2;14819:9;14815:18;14802:32;14791:9;14787:48;14730:115;:::i;:::-;14864:8;;-1:-1:-1;14891:8:153;-1:-1:-1;;;;;;14942:2:153;14927:18;;14914:32;14911:56;14908:76;;;14980:1;14977;14970:12;14908:76;15019:115;15126:7;15119:2;15108:9;15104:18;15091:32;15080:9;15076:48;15019:115;:::i;:::-;15153:8;;-1:-1:-1;15180:8:153;-1:-1:-1;;;;;;15231:3:153;15216:19;;15203:33;15200:57;15197:77;;;15270:1;15267;15260:12;15197:77;15309:116;15417:7;15409:3;15398:9;15394:19;15381:33;15370:9;15366:49;15309:116;:::i;:::-;15444:8;;-1:-1:-1;15471:8:153;-1:-1:-1;;;;;;15522:3:153;15507:19;;15494:33;15491:57;15488:77;;;15561:1;15558;15551:12;15488:77;15601:116;15709:7;15701:3;15690:9;15686:19;15673:33;15662:9;15658:49;15601:116;:::i;:::-;15736:8;;-1:-1:-1;15764:9:153;-1:-1:-1;15793:37:153;15825:3;15810:19;;15793:37;:::i;:::-;15782:48;;13739:2097;;;;;;;;;;;;;;:::o;15841:389::-;15929:6;15982:2;15970:9;15961:7;15957:23;15953:32;15950:52;;;15998:1;15995;15988:12;15950:52;16038:9;16025:23;-1:-1:-1;;;;;16063:6:153;16060:30;16057:50;;;16103:1;16100;16093:12;16057:50;16126:22;;16182:3;16164:16;;;16160:26;16157:46;;;16199:1;16196;16189:12;16466:792;16529:3;16560;16592:5;16586:12;16619:6;16614:3;16607:19;16651:4;16646:3;16642:14;16635:21;;16709:4;16699:6;16696:1;16692:14;16685:5;16681:26;16677:37;16748:4;16741:5;16737:16;16771:1;16781:451;16795:6;16792:1;16789:13;16781:451;;;16860:16;;;-1:-1:-1;;16856:30:153;16844:43;;16910:13;;16953:9;;-1:-1:-1;;;;;16949:35:153;16936:49;;17032:4;17024:13;;;17018:20;17075:4;17058:15;;;17051:29;;;17018:20;17101:47;;17132:15;;17018:20;17101:47;:::i;:::-;17183:4;17208:14;;;;17093:55;;-1:-1:-1;17171:17:153;;;;;-1:-1:-1;16817:1:153;16810:9;16781:451;;;-1:-1:-1;17248:4:153;;16466:792;-1:-1:-1;;;;;;16466:792:153:o;17263:500::-;17321:5;17328:6;17388:3;17375:17;17474:2;17470:7;17459:8;17443:14;17439:29;17435:43;17415:18;17411:68;17401:96;;17493:1;17490;17483:12;17401:96;17521:33;;17625:4;17612:18;;;-1:-1:-1;17573:21:153;;-1:-1:-1;;;;;;17642:30:153;;17639:50;;;17685:1;17682;17675:12;17639:50;17732:6;17716:14;17712:27;17705:5;17701:39;17698:59;;;17753:1;17750;17743:12;17768:266;17856:6;17851:3;17844:19;17908:6;17901:5;17894:4;17889:3;17885:14;17872:43;-1:-1:-1;17960:1:153;17935:16;;;17953:4;17931:27;;;17924:38;;;;18016:2;17995:15;;;-1:-1:-1;;17991:29:153;17982:39;;;17978:50;;17768:266::o;18039:1128::-;18128:3;18159;18183:6;18178:3;18171:19;18215:4;18210:3;18206:14;18199:21;;18273:4;18263:6;18260:1;18256:14;18249:5;18245:26;18241:37;18301:5;18324:1;18334:807;18348:6;18345:1;18342:13;18334:807;;;18413:16;;;-1:-1:-1;;18409:30:153;18397:43;;18479:20;;18554:14;18550:26;;;-1:-1:-1;;18546:40:153;18522:65;;18512:93;;18601:1;18598;18591:12;18512:93;18633:30;;18691:21;;18725:33;18691:21;18725:33;:::i;:::-;-1:-1:-1;;;;;18784:33:153;18771:47;;18865:59;18918:4;18905:18;;18909:7;18865:59;:::i;:::-;18831:93;;18961:4;18954;18948;18944:15;18937:29;18987:70;19051:4;19045;19041:15;19027:12;19013;18987:70;:::i;:::-;19092:4;19117:14;;;;18979:78;;-1:-1:-1;19080:17:153;;;;;-1:-1:-1;;18370:1:153;18363:9;18334:807;;19172:446;19225:3;19263:5;19257:12;19290:6;19285:3;19278:19;19322:4;19317:3;19313:14;19306:21;;19361:4;19354:5;19350:16;19384:1;19394:199;19408:6;19405:1;19402:13;19394:199;;;19473:13;;-1:-1:-1;;;;;19469:39:153;19457:52;;19538:4;19529:14;;;;19566:17;;;;19505:1;19423:9;19394:199;;;-1:-1:-1;19609:3:153;;19172:446;-1:-1:-1;;;;19172:446:153:o;19623:385::-;19743:1;19739;19734:3;19730:11;19726:19;19718:5;19712:12;19708:38;19703:3;19696:51;19678:3;19793:4;19786:5;19782:16;19776:23;19831:4;19824;19819:3;19815:14;19808:28;19857:58;19909:4;19904:3;19900:14;19886:12;19857:58;:::i;:::-;19968:4;19957:16;;;19951:23;19976:4;19947:34;19931:14;;;;19924:58;;;;-1:-1:-1;19845:70:153;19623:385;-1:-1:-1;19623:385:153:o;20013:1480::-;20784:3;20773:9;20766:22;20747:4;20811:67;20873:3;20862:9;20858:19;20850:6;20811:67;:::i;:::-;20926:9;20918:6;20914:22;20909:2;20898:9;20894:18;20887:50;20960:80;21033:6;21025;21017;20960:80;:::i;:::-;20946:94;;21088:9;21080:6;21076:22;21071:2;21060:9;21056:18;21049:50;21122:80;21195:6;21187;21179;21122:80;:::i;:::-;21108:94;;21250:9;21242:6;21238:22;21233:2;21222:9;21218:18;21211:50;21284:80;21357:6;21349;21341;21284:80;:::i;:::-;21270:94;;21413:9;21405:6;21401:22;21395:3;21384:9;21380:19;21373:51;21441:46;21480:6;21472;21441:46;:::i;:::-;21433:54;20013:1480;-1:-1:-1;;;;;;;;;;;20013:1480:153:o;21498:521::-;21575:4;21581:6;21641:11;21628:25;21735:2;21731:7;21720:8;21704:14;21700:29;21696:43;21676:18;21672:68;21662:96;;21754:1;21751;21744:12;21662:96;21781:33;;21833:20;;;-1:-1:-1;;;;;;21865:30:153;;21862:50;;;21908:1;21905;21898:12;21862:50;21941:4;21929:17;;-1:-1:-1;21972:14:153;21968:27;;;21958:38;;21955:58;;;22009:1;22006;21999:12;22024:331;22129:9;22140;22182:8;22170:10;22167:24;22164:44;;;22204:1;22201;22194:12;22164:44;22233:6;22223:8;22220:20;22217:40;;;22253:1;22250;22243:12;22217:40;-1:-1:-1;;22279:23:153;;;22324:25;;;;;-1:-1:-1;22024:331:153:o;22360:338::-;22480:19;;-1:-1:-1;;;;;;22517:29:153;;;22566:1;22558:10;;22555:137;;;-1:-1:-1;;;;;;22627:1:153;22623:11;;;22620:1;22616:19;22612:46;;;22604:55;;22600:82;;-1:-1:-1;22555:137:153;;22360:338;;;;:::o;22703:329::-;22940:2;22929:9;22922:21;22903:4;22960:66;23022:2;23011:9;23007:18;22999:6;22960:66;:::i;23037:428::-;23194:3;23232:6;23226:13;23248:66;23307:6;23302:3;23295:4;23287:6;23283:17;23248:66;:::i;:::-;23383:2;23379:15;;;;-1:-1:-1;;;;;;23375:53:153;23336:16;;;;23361:68;;;23456:2;23445:14;;23037:428;-1:-1:-1;;23037:428:153:o;23470:287::-;23599:3;23637:6;23631:13;23653:66;23712:6;23707:3;23700:4;23692:6;23688:17;23653:66;:::i;:::-;23735:16;;;;;23470:287;-1:-1:-1;;23470:287:153:o;23762:127::-;23823:10;23818:3;23814:20;23811:1;23804:31;23854:4;23851:1;23844:15;23878:4;23875:1;23868:15;24395:1544;24484:50;24530:3;24503:25;24522:5;24503:25;:::i;:::-;-1:-1:-1;;;;;306:31:153;294:44;;240:104;24484:50;24603:4;24592:16;;;24579:30;24625:14;;;24618:31;24466:3;24692:55;24741:4;24730:16;;24596:5;24692:55;:::i;:::-;24779:6;24772:4;24767:3;24763:14;24756:30;24807:71;24870:6;24865:3;24861:16;24847:12;24833;24807:71;:::i;:::-;24795:83;;;24925:55;24974:4;24967:5;24963:16;24956:5;24925:55;:::i;:::-;25022:3;25016:4;25012:14;25005:4;25000:3;24996:14;24989:38;25050:63;25108:4;25092:14;25076;25050:63;:::i;:::-;25182:4;25171:16;;;25158:30;25204:14;;;25197:31;25297:4;25286:16;;;25273:30;25319:14;;;25312:31;25412:4;25401:16;;;25388:30;25434:14;;;25427:31;25036:77;-1:-1:-1;25505:55:153;;-1:-1:-1;;25554:4:153;25543:16;;25175:5;25505:55;:::i;:::-;25604:3;25596:6;25592:16;25585:4;25580:3;25576:14;25569:40;25632:65;25690:6;25674:14;25658;25632:65;:::i;:::-;25618:79;;;;25744:57;25793:6;25786:5;25782:18;25775:5;25744:57;:::i;:::-;25847:3;25839:6;25835:16;25826:6;25821:3;25817:16;25810:42;25868:65;25926:6;25910:14;25894;25868:65;:::i;:::-;25861:72;24395:1544;-1:-1:-1;;;;;;24395:1544:153:o;25944:376::-;26177:2;26166:9;26159:21;26140:4;26197:74;26267:2;26256:9;26252:18;26244:6;26197:74;:::i;:::-;26189:82;;26307:6;26302:2;26291:9;26287:18;26280:34;25944:376;;;;;:::o;26325:184::-;26395:6;26448:2;26436:9;26427:7;26423:23;26419:32;26416:52;;;26464:1;26461;26454:12;26416:52;-1:-1:-1;26487:16:153;;26325:184;-1:-1:-1;26325:184:153:o;26514:271::-;26697:6;26689;26684:3;26671:33;26653:3;26723:16;;26748:13;;;26723:16;26514:271;-1:-1:-1;26514:271:153:o;26790:350::-;26910:19;;-1:-1:-1;;;;;;26947:33:153;;;27000:1;26992:10;;26989:145;;;-1:-1:-1;;;;;;27061:1:153;27057:11;;;;27054:1;27050:19;27046:50;;;27038:59;27034:90;;;;26790:350;-1:-1:-1;;26790:350:153:o;27145:247::-;27204:6;27257:2;27245:9;27236:7;27232:23;27228:32;27225:52;;;27273:1;27270;27263:12;27225:52;27312:9;27299:23;27331:31;27356:5;27331:31;:::i;28065:383::-;28222:3;28260:6;28254:13;28276:66;28335:6;28330:3;28323:4;28315:6;28311:17;28276:66;:::i;:::-;28364:16;;;;28389:21;;;-1:-1:-1;28437:4:153;28426:16;;28065:383;-1:-1:-1;28065:383:153:o;28899:1079::-;-1:-1:-1;;;;;29391:32:153;;29373:51;;29460:3;29455:2;29440:18;;29433:31;;;-1:-1:-1;;29487:57:153;;29524:19;;29516:6;29487:57;:::i;:::-;29575:2;29560:18;;29553:34;;;-1:-1:-1;;;;;29623:32:153;;29618:2;29603:18;;29596:60;29693:22;;;29687:3;29672:19;;29665:51;29739:32;29697:6;29756;29739:32;:::i;:::-;-1:-1:-1;;;;;29808:32:153;;29828:3;29787:19;;29780:61;29878:22;;;29872:3;29857:19;;29850:51;29725:46;-1:-1:-1;29918:54:153;29725:46;29957:6;29918:54;:::i;:::-;29910:62;28899:1079;-1:-1:-1;;;;;;;;;;28899:1079:153:o;29983:1518::-;30766:3;30755:9;30748:22;30729:4;30793:93;30881:3;30870:9;30866:19;30858:6;30850;30793:93;:::i;:::-;30934:9;30926:6;30922:22;30917:2;30906:9;30902:18;30895:50;30968:80;31041:6;31033;31025;30968:80;:::i;:::-;30954:94;;31096:9;31088:6;31084:22;31079:2;31068:9;31064:18;31057:50;31130:80;31203:6;31195;31187;31130:80;:::i;:::-;31116:94;;31258:9;31250:6;31246:22;31241:2;31230:9;31226:18;31219:50;31292:80;31365:6;31357;31349;31292:80;:::i;:::-;31278:94;;31421:9;31413:6;31409:22;31403:3;31392:9;31388:19;31381:51;31449:46;31488:6;31480;31449:46;:::i;:::-;31441:54;29983:1518;-1:-1:-1;;;;;;;;;;;;29983:1518:153:o;31506:545::-;31599:4;31605:6;31665:11;31652:25;31759:2;31755:7;31744:8;31728:14;31724:29;31720:43;31700:18;31696:68;31686:96;;31778:1;31775;31768:12;31686:96;31805:33;;31857:20;;;-1:-1:-1;;;;;;31889:30:153;;31886:50;;;31932:1;31929;31922:12;31886:50;31965:4;31953:17;;-1:-1:-1;32016:1:153;32012:14;;;31996;31992:35;31982:46;;31979:66;;;32041:1;32038;32031:12;32327:1350;32775:3;32788:22;;;32760:19;;32845:22;;;32727:4;32925:6;32898:3;32883:19;;32727:4;32959:281;32973:6;32970:1;32967:13;32959:281;;;33048:6;33035:20;33068:31;33093:5;33068:31;:::i;:::-;-1:-1:-1;;;;;33124:31:153;33112:44;;33185:4;33213:17;;;;33176:14;;;;33152:1;32988:9;32959:281;;;32963:3;33278:6;33271:4;33260:9;33256:20;33249:36;33294:46;33336:2;33325:9;33321:18;33313:6;-1:-1:-1;;;;;306:31:153;294:44;;240:104;33294:46;33385:9;33380:3;33376:19;33371:2;33360:9;33356:18;33349:47;33413:46;33455:3;33447:6;33439;33413:46;:::i;:::-;33405:54;;;;33468:47;33510:3;33499:9;33495:19;33487:6;-1:-1:-1;;;;;306:31:153;294:44;;240:104;33468:47;-1:-1:-1;;;;;306:31:153;;33566:3;33551:19;;294:44;33608:6;33602:3;33591:9;33587:19;33580:35;33624:47;33666:3;33655:9;33651:19;33643:6;-1:-1:-1;;;;;306:31:153;294:44;;240:104;33682:360;33893:6;33885;33880:3;33867:33;33963:2;33959:15;;;;-1:-1:-1;;;;;;33955:53:153;33919:16;;33944:65;;;34033:2;34025:11;;33682:360;-1:-1:-1;33682:360:153:o;34413:402::-;34646:2;34635:9;34628:21;34609:4;34666:74;34736:2;34725:9;34721:18;34713:6;34666:74;:::i;:::-;34658:82;;34805:1;34801;34796:3;34792:11;34788:19;34780:6;34776:32;34771:2;34760:9;34756:18;34749:60;34413:402;;;;;:::o;34820:461::-;34873:5;34926:3;34919:4;34911:6;34907:17;34903:27;34893:55;;34944:1;34941;34934:12;34893:55;34977:6;34971:13;35008:52;35024:35;35052:6;35024:35;:::i;35008:52::-;35085:6;35076:7;35069:23;35139:3;35132:4;35123:6;35115;35111:19;35107:30;35104:39;35101:59;;;35156:1;35153;35146:12;35101:59;35169:81;35243:6;35236:4;35227:7;35223:18;35216:4;35208:6;35204:17;35169:81;:::i;:::-;35268:7;34820:461;-1:-1:-1;;;;34820:461:153:o;35286:171::-;35364:13;;35417:14;35406:26;;35396:37;;35386:65;;35447:1;35444;35437:12;35462:720;35575:6;35583;35591;35599;35652:3;35640:9;35631:7;35627:23;35623:33;35620:53;;;35669:1;35666;35659:12;35620:53;35702:9;35696:16;-1:-1:-1;;;;;35727:6:153;35724:30;35721:50;;;35767:1;35764;35757:12;35721:50;35790:60;35842:7;35833:6;35822:9;35818:22;35790:60;:::i;:::-;35780:70;;;35869:48;35913:2;35902:9;35898:18;35869:48;:::i;:::-;35859:58;;35936:48;35980:2;35969:9;35965:18;35936:48;:::i;:::-;35926:58;;36030:2;36019:9;36015:18;36009:25;-1:-1:-1;;;;;36049:8:153;36046:32;36043:52;;;36091:1;36088;36081:12;36043:52;36114:62;36168:7;36157:8;36146:9;36142:24;36114:62;:::i;:::-;36104:72;;;35462:720;;;;;;;:::o;36187:127::-;36248:10;36243:3;36239:20;36236:1;36229:31;36279:4;36276:1;36269:15;36303:4;36300:1;36293:15;36319:135;36358:3;36379:17;;;36376:43;;36399:18;;:::i;:::-;-1:-1:-1;36446:1:153;36435:13;;36319:135::o;36459:168::-;36532:9;;;36563;;36580:15;;;36574:22;;36560:37;36550:71;;36601:18;;:::i;36972:125::-;37037:9;;;37058:10;;;37055:36;;;37071:18;;:::i;37758:288::-;37933:6;37922:9;37915:25;37976:2;37971;37960:9;37956:18;37949:30;37896:4;37996:44;38036:2;38025:9;38021:18;38013:6;37996:44;:::i;38051:290::-;38120:6;38173:2;38161:9;38152:7;38148:23;38144:32;38141:52;;;38189:1;38186;38179:12;38141:52;38215:16;;-1:-1:-1;;;;;;38260:32:153;;38250:43;;38240:71;;38307:1;38304;38297:12;38346:151;38436:4;38429:12;;;38415;;;38411:31;;38454:14;;38451:40;;;38471:18;;:::i", + "linkReferences": {}, + "immutableReferences": { + "64381": [ + { "start": 246, "length": 32 }, + { "start": 1385, "length": 32 }, + { "start": 2451, "length": 32 }, + { "start": 4368, "length": 32 } + ], + "64383": [ + { "start": 426, "length": 32 }, + { "start": 1470, "length": 32 }, + { "start": 4263, "length": 32 }, + { "start": 5098, "length": 32 } + ], + "64386": [ + { "start": 345, "length": 32 }, + { "start": 1168, "length": 32 }, + { "start": 4038, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "REGISTRY()": "06433b1b", + "SUPPORTED_ENTRYPOINT()": "137e051e", + "accountId()": "9cfd7cff", + "addSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": "d78343d9", + "domainSeparator()": "f698da25", + "getInitHash()": "3c9de1b8", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4", + "hash((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": "928107f9", + "initSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": "15cca638", + "preValidationSetup(bytes32,address,bytes)": "4fff40e1", + "predictSafeAddress(address,address,bytes,bytes32,bytes)": "663c87d8", + "setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": "d9ed0e8f", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"},{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidEntryPoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSetup\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUserOperationData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDelegatecall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyProxy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PreValidationSetupFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Safe7579LaunchpadAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"contractSignature\",\"type\":\"bytes\"}],\"name\":\"WrongContractSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"contractSignatureLen\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signaturesLen\",\"type\":\"uint256\"}],\"name\":\"WrongContractSignatureFormat\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"REGISTRY\",\"outputs\":[{\"internalType\":\"contract IERC7484\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPORTED_ENTRYPOINT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"addSafe7579\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInitHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"setupTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"setupData\",\"type\":\"bytes\"},{\"internalType\":\"contract ISafe7579\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Safe7579Launchpad.InitData\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"initSafe7579\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"initHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"preInit\",\"type\":\"bytes\"}],\"name\":\"preValidationSetup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"safeProxyFactory\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"creationCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"factoryInitializer\",\"type\":\"bytes\"}],\"name\":\"predictSafeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"safeProxy\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"setupTo\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"setupData\",\"type\":\"bytes\"},{\"internalType\":\"contract ISafe7579\",\"name\":\"safe7579\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct Safe7579Launchpad.InitData\",\"name\":\"initData\",\"type\":\"tuple\"}],\"name\":\"setupSafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"supported\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth\",\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)\":{\"details\":\"Decodes an ERC-4337 user operation into a Safe operation.\",\"params\":{\"userOp\":\"The ERC-4337 user operation.\"},\"returns\":{\"operationData\":\"Encoded EIP-712 Safe operation data bytes used for signature verification.\",\"signatures\":\"The Safe owner signatures extracted from the user operation.\",\"validAfter\":\"The timestamp the user operation is valid from.\",\"validUntil\":\"The timestamp the user operation is valid until.\"}},\"preValidationSetup(bytes32,address,bytes)\":{\"params\":{\"initHash\":\"will be calculated offchain using this.hash(InitData)\",\"preInit\":\"optional parameter for a delegatecall\",\"to\":\"optional parameter for a delegatecall\"}},\"predictSafeAddress(address,address,bytes,bytes32,bytes)\":{\"details\":\"factoryInitializer is expected to be: abi.encodeCall(Safe7579Launchpad.preValidationSetup, (initHash, to, callData));\"},\"setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))\":{\"params\":{\"initData\":\"initData to initialize the Safe and Safe7579 Adapter\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"params\":{\"missingAccountFunds\":\"amount of gas that has to be paid\",\"userOp\":\"EntryPoint v0.7 userOp.\",\"userOpHash\":\"hash of userOp\"},\"returns\":{\"validationData\":\"4337 packed validation data returned by the validator module\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)\":{\"notice\":\"This function allows existing safe accounts to add the Safe7579 adapter to their account\"},\"hash((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))\":{\"notice\":\"Create unique InitData hash. Using all params but excluding data.callData from hash\"},\"initSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)\":{\"notice\":\"This function is intended to be delegatecalled by the ISafe.setup function. It configures the Safe7579 for the user for all module types except validators, which were initialized in the validateUserOp function.\"},\"preValidationSetup(bytes32,address,bytes)\":{\"notice\":\"SafeProxyFactory will create a SafeProxy and using this contract as the singleton implementation and call this function to initialize the account. will write initHash into SafeProxy storage\"},\"predictSafeAddress(address,address,bytes,bytes32,bytes)\":{\"notice\":\"Helper function that can be used offchain to predict the counterfactual Safe address.\"},\"setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))\":{\"notice\":\"During the execution phase of ERC4337, this function upgrades the SafeProxy to the actual SafeSingleton implementation. Subsequently, it invokes the ISafe.setup() function to initialize the Safe Account. The setup() function should ensure the completion of Safe7579 Adapter initialization with InitData.setupTo as address(this) and InitData.setupData encoding the call to this.initSafe7579(). SafeProxy.setup() delegatecalls this function to install executors, fallbacks, hooks, and registry configurations on the Safe7579 adapter. As this occurs in the ERC4337 execution phase, storage restrictions are not applicable.\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Upon creation of SafeProxy by SafeProxyFactory, EntryPoint invokes this function to verify the transaction. It ensures that only this.setupSafe() can be called by EntryPoint during execution. The function validates the hash of InitData in userOp.callData against the hash stored in preValidationSetup. This function abides by ERC4337 storage restrictions, allowing Safe7579 adapter initialization only in Validation Modules compliant with 4337. It installs validators from InitData onto the Safe7579 adapter for the account. When called by EP, the SafeProxy singleton address remains unupgraded to SafeSingleton, preventing execTransactionFromModule by Safe7579 Adapter. Initialization of Validator Modules is achieved through a direct call to onInstall(). This delegatecalled function initializes the Validator Module with the correct msg.sender. Once all validator modules are set up, they can be used to validate the userOp. Parameters include userOp (EntryPoint v0.7 userOp), userOpHash, and missingAccountFunds representing the gas payment required.\"}},\"notice\":\"Launchpad to deploy a Safe account and connect the Safe7579 adapter. Check Readme.md for more information. Special thanks to [nlordell (Safe)](https://github.com/nlordell), who came up with [this technique](https://github.com/safe-global/safe-modules/pull/184)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Safe7579Launchpad.sol\":\"Safe7579Launchpad\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e\",\"dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc\"]},\"node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol\":{\"keccak256\":\"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc\",\"dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAccount.sol\":{\"keccak256\":\"0x38710bec0cb20ff4ceef46a80475b5bdabc27b7efd2687fd473db68332f61b78\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://dea7a723e1ef852e8764e69914a345d2e8bc5e13facfc9d5c29d791cb4ab0020\",\"dweb:/ipfs/QmU8dYgyF4DBJXFqjwLAtnE3q8q259ChfoEk9a6wyhHzEP\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"node_modules/@rhinestone/checknsignatures/src/CheckNSignatures.sol\":{\"keccak256\":\"0x8392bfc019b80519960685df058636a57011b09925d7a351ae3c63aad40cda73\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfafd74f1f0e61b9442436e807529600696eb38559c35b5c10a213bdbf6e2363\",\"dweb:/ipfs/QmXFG4cyBJeZmyENTwGc9xcygCg9qK3SHsN3z6kvSPbnHm\"]},\"node_modules/@safe-global/safe-contracts/contracts/libraries/SafeStorage.sol\":{\"keccak256\":\"0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://f2c67b22791022356f5ca85533ecdda740aa8d5c9ed263d0c2761f2560dd1b87\",\"dweb:/ipfs/QmYf6gm89StvSTgZGR83UgSmUgJGjhGbBRRNvmxwywfiMc\"]},\"node_modules/erc7579/src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5\",\"dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC\"]},\"node_modules/solady/src/utils/ECDSA.sol\":{\"keccak256\":\"0x317f8208d1f03356e8f709eec8e2c579d6be227099a26f777cc9ec8a06814ae4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f437b1683add465da31ecc92259d056d11edb4ea95dff22a8519fdabd82423dc\",\"dweb:/ipfs/QmbsFH26DQtnb97yqfF6Bw7CULFXupcra1x1xcq2Yy63FY\"]},\"node_modules/solady/src/utils/LibSort.sol\":{\"keccak256\":\"0x39ea0fe7c9f2138c890e37df2adbe83e222deda7271e2717f98fa42556ab93ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebdeea46531d4e8ccbaa1e4ed33e41b3a3f4c45fc76f54d06f4d4d213cb1d231\",\"dweb:/ipfs/QmckdgpGYChN5YC5AjK2FLXre225nvTixQhDQ8aewrdgMQ\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b\",\"dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3\"]},\"src/ISafe7579.sol\":{\"keccak256\":\"0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98\",\"dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9\"]},\"src/Safe7579Launchpad.sol\":{\"keccak256\":\"0xe92c16b1da189f17e6578034b6b6ddb7a9a970378ac028c12d7dc614f90707bf\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://87cae95ead2e9c2b1015310c0e0ffb741821736ac5dfb151df1cc96a44d4ff2e\",\"dweb:/ipfs/QmVRJePNMv3ZH9kxg7kSwz7NAuxDjt99tT6BcnG99YTNbJ\"]},\"src/core/SafeOp.sol\":{\"keccak256\":\"0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04\",\"dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ\"]},\"src/core/SupportViewer.sol\":{\"keccak256\":\"0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd\",\"dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c\",\"dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/ISafe.sol\":{\"keccak256\":\"0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457\",\"dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + }, + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "type": "error", "name": "InvalidEntryPoint" }, + { "inputs": [], "type": "error", "name": "InvalidInitHash" }, + { "inputs": [], "type": "error", "name": "InvalidSetup" }, + { "inputs": [], "type": "error", "name": "InvalidSignature" }, + { "inputs": [], "type": "error", "name": "InvalidUserOperationData" }, + { "inputs": [], "type": "error", "name": "OnlyDelegatecall" }, + { "inputs": [], "type": "error", "name": "OnlyProxy" }, + { "inputs": [], "type": "error", "name": "PreValidationSetupFailed" }, + { + "inputs": [], + "type": "error", + "name": "Safe7579LaunchpadAlreadyInitialized" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "contractSignature", + "type": "bytes" + } + ], + "type": "error", + "name": "WrongContractSignature" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "s", "type": "uint256" }, + { + "internalType": "uint256", + "name": "contractSignatureLen", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signaturesLen", + "type": "uint256" + } + ], + "type": "error", + "name": "WrongContractSignatureFormat" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "REGISTRY", + "outputs": [ + { + "internalType": "contract IERC7484", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "SUPPORTED_ENTRYPOINT", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addSafe7579" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getInitHash", + "outputs": [ + { "internalType": "bytes32", "name": "value", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + }, + { + "inputs": [ + { + "internalType": "struct Safe7579Launchpad.InitData", + "name": "data", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "singleton", + "type": "address" + }, + { + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "address", + "name": "setupTo", + "type": "address" + }, + { + "internalType": "bytes", + "name": "setupData", + "type": "bytes" + }, + { + "internalType": "contract ISafe7579", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ] + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "pure", + "type": "function", + "name": "hash", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initSafe7579" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "initHash", + "type": "bytes32" + }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "bytes", "name": "preInit", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "preValidationSetup" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "singleton", + "type": "address" + }, + { + "internalType": "address", + "name": "safeProxyFactory", + "type": "address" + }, + { + "internalType": "bytes", + "name": "creationCode", + "type": "bytes" + }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "factoryInitializer", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "predictSafeAddress", + "outputs": [ + { + "internalType": "address", + "name": "safeProxy", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct Safe7579Launchpad.InitData", + "name": "initData", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "singleton", + "type": "address" + }, + { + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "address", + "name": "setupTo", + "type": "address" + }, + { + "internalType": "bytes", + "name": "setupData", + "type": "bytes" + }, + { + "internalType": "contract ISafe7579", + "name": "safe7579", + "type": "address" + }, + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ] + }, + { "internalType": "bytes", "name": "callData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setupSafe" + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [ + { "internalType": "bool", "name": "supported", "type": "bool" } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validationData", + "type": "uint256" + } + ] + }, + { "inputs": [], "stateMutability": "payable", "type": "receive" } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": { + "details": "Decodes an ERC-4337 user operation into a Safe operation.", + "params": { "userOp": "The ERC-4337 user operation." }, + "returns": { + "operationData": "Encoded EIP-712 Safe operation data bytes used for signature verification.", + "signatures": "The Safe owner signatures extracted from the user operation.", + "validAfter": "The timestamp the user operation is valid from.", + "validUntil": "The timestamp the user operation is valid until." + } + }, + "preValidationSetup(bytes32,address,bytes)": { + "params": { + "initHash": "will be calculated offchain using this.hash(InitData)", + "preInit": "optional parameter for a delegatecall", + "to": "optional parameter for a delegatecall" + } + }, + "predictSafeAddress(address,address,bytes,bytes32,bytes)": { + "details": "factoryInitializer is expected to be: abi.encodeCall(Safe7579Launchpad.preValidationSetup, (initHash, to, callData));" + }, + "setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": { + "params": { + "initData": "initData to initialize the Safe and Safe7579 Adapter" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "params": { + "missingAccountFunds": "amount of gas that has to be paid", + "userOp": "EntryPoint v0.7 userOp.", + "userOpHash": "hash of userOp" + }, + "returns": { + "validationData": "4337 packed validation data returned by the validator module" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "addSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": { + "notice": "This function allows existing safe accounts to add the Safe7579 adapter to their account" + }, + "hash((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": { + "notice": "Create unique InitData hash. Using all params but excluding data.callData from hash" + }, + "initSafe7579(address,(address,bytes)[],(address,bytes)[],(address,bytes)[],address[],uint8)": { + "notice": "This function is intended to be delegatecalled by the ISafe.setup function. It configures the Safe7579 for the user for all module types except validators, which were initialized in the validateUserOp function." + }, + "preValidationSetup(bytes32,address,bytes)": { + "notice": "SafeProxyFactory will create a SafeProxy and using this contract as the singleton implementation and call this function to initialize the account. will write initHash into SafeProxy storage" + }, + "predictSafeAddress(address,address,bytes,bytes32,bytes)": { + "notice": "Helper function that can be used offchain to predict the counterfactual Safe address." + }, + "setupSafe((address,address[],uint256,address,bytes,address,(address,bytes)[],bytes))": { + "notice": "During the execution phase of ERC4337, this function upgrades the SafeProxy to the actual SafeSingleton implementation. Subsequently, it invokes the ISafe.setup() function to initialize the Safe Account. The setup() function should ensure the completion of Safe7579 Adapter initialization with InitData.setupTo as address(this) and InitData.setupData encoding the call to this.initSafe7579(). SafeProxy.setup() delegatecalls this function to install executors, fallbacks, hooks, and registry configurations on the Safe7579 adapter. As this occurs in the ERC4337 execution phase, storage restrictions are not applicable." + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "Upon creation of SafeProxy by SafeProxyFactory, EntryPoint invokes this function to verify the transaction. It ensures that only this.setupSafe() can be called by EntryPoint during execution. The function validates the hash of InitData in userOp.callData against the hash stored in preValidationSetup. This function abides by ERC4337 storage restrictions, allowing Safe7579 adapter initialization only in Validation Modules compliant with 4337. It installs validators from InitData onto the Safe7579 adapter for the account. When called by EP, the SafeProxy singleton address remains unupgraded to SafeSingleton, preventing execTransactionFromModule by Safe7579 Adapter. Initialization of Validator Modules is achieved through a direct call to onInstall(). This delegatecalled function initializes the Validator Module with the correct msg.sender. Once all validator modules are set up, they can be used to validate the userOp. Parameters include userOp (EntryPoint v0.7 userOp), userOpHash, and missingAccountFunds representing the gas payment required." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Safe7579Launchpad.sol": "Safe7579Launchpad" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol": { + "keccak256": "0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6", + "urls": [ + "bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e", + "dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol": { + "keccak256": "0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b", + "urls": [ + "bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc", + "dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/IAccount.sol": { + "keccak256": "0x38710bec0cb20ff4ceef46a80475b5bdabc27b7efd2687fd473db68332f61b78", + "urls": [ + "bzz-raw://dea7a723e1ef852e8764e69914a345d2e8bc5e13facfc9d5c29d791cb4ab0020", + "dweb:/ipfs/QmU8dYgyF4DBJXFqjwLAtnE3q8q259ChfoEk9a6wyhHzEP" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "node_modules/@rhinestone/checknsignatures/src/CheckNSignatures.sol": { + "keccak256": "0x8392bfc019b80519960685df058636a57011b09925d7a351ae3c63aad40cda73", + "urls": [ + "bzz-raw://cfafd74f1f0e61b9442436e807529600696eb38559c35b5c10a213bdbf6e2363", + "dweb:/ipfs/QmXFG4cyBJeZmyENTwGc9xcygCg9qK3SHsN3z6kvSPbnHm" + ], + "license": "MIT" + }, + "node_modules/@safe-global/safe-contracts/contracts/libraries/SafeStorage.sol": { + "keccak256": "0xae0c704f3e4ec6b1436bbbd10b153feaa665ac36e556ccc4f2155e4c02f5c46a", + "urls": [ + "bzz-raw://f2c67b22791022356f5ca85533ecdda740aa8d5c9ed263d0c2761f2560dd1b87", + "dweb:/ipfs/QmYf6gm89StvSTgZGR83UgSmUgJGjhGbBRRNvmxwywfiMc" + ], + "license": "LGPL-3.0-only" + }, + "node_modules/erc7579/src/interfaces/IERC7579Module.sol": { + "keccak256": "0x78ab984fc364972382a73a0d793c558f52800999d5e0e69c4df326a1de840604", + "urls": [ + "bzz-raw://b37c25d32fab8b1622838de12f2e4b5744613b95b204262b76efb11a994554e5", + "dweb:/ipfs/QmPmRkoV2FxQ72mjhZm7BfU1ivN3TMPhdDc6mHEv7hcoUC" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/ECDSA.sol": { + "keccak256": "0x317f8208d1f03356e8f709eec8e2c579d6be227099a26f777cc9ec8a06814ae4", + "urls": [ + "bzz-raw://f437b1683add465da31ecc92259d056d11edb4ea95dff22a8519fdabd82423dc", + "dweb:/ipfs/QmbsFH26DQtnb97yqfF6Bw7CULFXupcra1x1xcq2Yy63FY" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/LibSort.sol": { + "keccak256": "0x39ea0fe7c9f2138c890e37df2adbe83e222deda7271e2717f98fa42556ab93ce", + "urls": [ + "bzz-raw://ebdeea46531d4e8ccbaa1e4ed33e41b3a3f4c45fc76f54d06f4d4d213cb1d231", + "dweb:/ipfs/QmckdgpGYChN5YC5AjK2FLXre225nvTixQhDQ8aewrdgMQ" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d", + "urls": [ + "bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b", + "dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3" + ], + "license": "GPL-3.0" + }, + "src/ISafe7579.sol": { + "keccak256": "0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b", + "urls": [ + "bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98", + "dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9" + ], + "license": "MIT" + }, + "src/Safe7579Launchpad.sol": { + "keccak256": "0xe92c16b1da189f17e6578034b6b6ddb7a9a970378ac028c12d7dc614f90707bf", + "urls": [ + "bzz-raw://87cae95ead2e9c2b1015310c0e0ffb741821736ac5dfb151df1cc96a44d4ff2e", + "dweb:/ipfs/QmVRJePNMv3ZH9kxg7kSwz7NAuxDjt99tT6BcnG99YTNbJ" + ], + "license": "GPL-3.0" + }, + "src/core/SafeOp.sol": { + "keccak256": "0xb6473e02037d90a434fc5ea0717d5e40e5d7da9a490d21772e2942d90e32142e", + "urls": [ + "bzz-raw://4ce5dc42ad8033dfa9202b09507818ddae2500b58a491067a73ff0a854e36e04", + "dweb:/ipfs/QmbXe7jzBmohrpw4SP69m38DTnD4CMPh4LQrErUWLHk8LQ" + ], + "license": "GPL-3.0" + }, + "src/core/SupportViewer.sol": { + "keccak256": "0x214e94440a962e25ea949099c508d40464e43630373e76b9836d56c2b1733faf", + "urls": [ + "bzz-raw://afba234e2d09d13cb65ad7d153f0c030f2950a882908e518ee94cbd09d0e1ccd", + "dweb:/ipfs/QmTvfGKT8EhLJQTJSLow8YGposfdeyhntsNG8C1aRfY3NW" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff", + "urls": [ + "bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c", + "dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/ISafe.sol": { + "keccak256": "0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f", + "urls": [ + "bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457", + "dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4" + ], + "license": "LGPL-3.0-only" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 114 +} diff --git a/artifacts/interfaces/IERC7579Account.json b/artifacts/interfaces/IERC7579Account.json new file mode 100644 index 0000000..57e2469 --- /dev/null +++ b/artifacts/interfaces/IERC7579Account.json @@ -0,0 +1,528 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnData", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"installModule(uint256,address,bytes)\":{\"details\":\"installs a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module\",\"params\":{\"data\":\"The data that is signed\",\"hash\":\"The hash of the data that is signed\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Account.sol\":\"IERC7579Account\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uninstallModule" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "installModule(uint256,address,bytes)": { + "details": "installs a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "details": "ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module", + "params": { + "data": "The data that is signed", + "hash": "The hash of the data that is signed" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Account.sol": "IERC7579Account" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 125 +} diff --git a/artifacts/interfaces/IERC7579AccountEvents.json b/artifacts/interfaces/IERC7579AccountEvents.json new file mode 100644 index 0000000..0d911d3 --- /dev/null +++ b/artifacts/interfaces/IERC7579AccountEvents.json @@ -0,0 +1,144 @@ +{ + "abi": [ + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": {}, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Account.sol\":\"IERC7579AccountEvents\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Account.sol": "IERC7579AccountEvents" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 125 +} diff --git a/artifacts/interfaces/IERC7579AccountView.json b/artifacts/interfaces/IERC7579AccountView.json new file mode 100644 index 0000000..f2dd8e5 --- /dev/null +++ b/artifacts/interfaces/IERC7579AccountView.json @@ -0,0 +1,172 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Account.sol\":\"IERC7579AccountView\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Account.sol": "IERC7579AccountView" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 125 +} diff --git a/artifacts/interfaces/IExecutor.json b/artifacts/interfaces/IExecutor.json new file mode 100644 index 0000000..3d80e45 --- /dev/null +++ b/artifacts/interfaces/IExecutor.json @@ -0,0 +1,171 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IExecutor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IExecutor" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/IFallback.json b/artifacts/interfaces/IFallback.json new file mode 100644 index 0000000..d1c6b9f --- /dev/null +++ b/artifacts/interfaces/IFallback.json @@ -0,0 +1,171 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IFallback\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IFallback" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/IHook.json b/artifacts/interfaces/IHook.json new file mode 100644 index 0000000..a21c0cc --- /dev/null +++ b/artifacts/interfaces/IHook.json @@ -0,0 +1,224 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "postCheck", + "inputs": [ + { "name": "hookData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "preCheck", + "inputs": [ + { "name": "msgSender", "type": "address", "internalType": "address" }, + { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, + { "name": "msgData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "hookData", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3", + "postCheck(bytes)": "173bf7da", + "preCheck(address,uint256,bytes)": "d68f6025" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"postCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"msgData\",\"type\":\"bytes\"}],\"name\":\"preCheck\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IHook\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "hookData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "postCheck" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "msgSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "msgValue", + "type": "uint256" + }, + { "internalType": "bytes", "name": "msgData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "preCheck", + "outputs": [ + { "internalType": "bytes", "name": "hookData", "type": "bytes" } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IHook" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/IMSA.json b/artifacts/interfaces/IMSA.json new file mode 100644 index 0000000..0e0d50e --- /dev/null +++ b/artifacts/interfaces/IMSA.json @@ -0,0 +1,848 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnData", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "executeUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "initializeAccount", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "validationData", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { "type": "error", "name": "AccountInitializationFailed", "inputs": [] }, + { + "type": "error", + "name": "MismatchModuleTypeId", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": "8dd7712f", + "initializeAccount(bytes)": "4b6a1419", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountInitializationFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"MismatchModuleTypeId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"}],\"name\":\"executeUserOp\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initializeAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)\":{\"params\":{\"userOp\":\"- The operation that was just validated.\",\"userOpHash\":\"- Hash of the user's request data.\"}},\"initializeAccount(bytes)\":{\"details\":\"Initializes the account. Function might be called directly, or by a Factory\",\"params\":{\"data\":\". encoded data that can be used during the initialization phase\"}},\"installModule(uint256,address,bytes)\":{\"details\":\"installs a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module\",\"params\":{\"data\":\"The data that is signed\",\"hash\":\"The hash of the data that is signed\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"authorizer\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid. 0 for \\\"indefinite\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)\":{\"notice\":\"Account may implement this execute method. passing this methodSig at the beginning of callData will cause the entryPoint to pass the full UserOp (and hash) to the account. The account should skip the methodSig, and use the callData (and optionally, other UserOp fields)\"},\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/erc7579/src/interfaces/IMSA.sol\":\"IMSA\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"node_modules/erc7579/src/interfaces/IERC4337Account.sol\":{\"keccak256\":\"0x55f4a9fe65535a8b3f6db727c764aad1eb237a22828f2565941d0c079e9b7e3e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc161771a4b8cf0a71da17b63f8bc41b325ce92a3b0185f42c7565512b21c614\",\"dweb:/ipfs/QmTLH2JGFoAGd1KpYMxyEXVCxtGqrumairejZfS9pc64TG\"]},\"node_modules/erc7579/src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0x08368aba5f1bb83eb57e9f8d31a04edee4be69159b4844a6443f65100917011c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://789244f53fb8b25f4bacb8ac0b9c2f5ea2067a9c5c7bd13fd00e10618e52e2ff\",\"dweb:/ipfs/QmVSbGSyDpfL6UfyvaMBQHmV9u52wway1h3caJnvXVgkvn\"]},\"node_modules/erc7579/src/interfaces/IMSA.sol\":{\"keccak256\":\"0x649ef44dfc5ba9b485b31cda765335e96f35aa6e595fd8d86c28a62aa8982cbe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43dac226bde7880ef807331972ec074d1bd046ca0bd776c69fec026416469e05\",\"dweb:/ipfs/QmWjEtYgMggSGBiQp1JaowyVux27a2WCGVmku4hn1oLcVn\"]},\"node_modules/erc7579/src/lib/ModeLib.sol\":{\"keccak256\":\"0x02ce0fc8805d1427841f32e2335157e3fae18e99d5c49ba46d53e12fcd1a5185\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9900d0dfb593b136a058a16f1817f60d5096c3eca6adea662381e12c241b14b4\",\"dweb:/ipfs/QmdsfLLtfzY9oEpZxk1Ve1PLuPQdphZcNK92L6mHa8n1h7\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "AccountInitializationFailed" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "MismatchModuleTypeId" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "executeUserOp" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "initializeAccount" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "payable", + "type": "function", + "name": "uninstallModule" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "validationData", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by ERC-4337 EntryPoint.solEnsure adequate authorization control: i.e. onlyEntryPointOrSelfMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the account. This function is intended to be called by Executor ModulesEnsure adequate authorization control: i.e. onlyExecutorModuleMSA MUST implement this function signature. If a mode is requested that is not supported by the Account, it MUST revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": { + "params": { + "userOp": "- The operation that was just validated.", + "userOpHash": "- Hash of the user's request data." + } + }, + "initializeAccount(bytes)": { + "details": "Initializes the account. Function might be called directly, or by a Factory", + "params": { + "data": ". encoded data that can be used during the initialization phase" + } + }, + "installModule(uint256,address,bytes)": { + "details": "installs a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "details": "ERC-1271 isValidSignature This function is intended to be used to validate a smart account signature and may forward the call to a validator module", + "params": { + "data": "The data that is signed", + "hash": "The hash of the data that is signed" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "uninstalls a Module of a certain type on the smart accountImplement Authorization control of your chosing", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "details": "Must validate caller is the entryPoint. Must validate the signature and nonce", + "params": { + "missingAccountFunds": "- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.", + "userOp": "- The operation that is about to be executed.", + "userOpHash": "- Hash of the user's request data. can be used as the basis for signature." + }, + "returns": { + "validationData": " - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"authorizer\" contract. <6-byte> validUntil - Last timestamp this operation is valid. 0 for \"indefinite\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "executeUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": { + "notice": "Account may implement this execute method. passing this methodSig at the beginning of callData will cause the entryPoint to pass the full UserOp (and hash) to the account. The account should skip the methodSig, and use the callData (and optionally, other UserOp fields)" + }, + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "node_modules/erc7579/src/interfaces/IMSA.sol": "IMSA" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "node_modules/erc7579/src/interfaces/IERC4337Account.sol": { + "keccak256": "0x55f4a9fe65535a8b3f6db727c764aad1eb237a22828f2565941d0c079e9b7e3e", + "urls": [ + "bzz-raw://cc161771a4b8cf0a71da17b63f8bc41b325ce92a3b0185f42c7565512b21c614", + "dweb:/ipfs/QmTLH2JGFoAGd1KpYMxyEXVCxtGqrumairejZfS9pc64TG" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/interfaces/IERC7579Account.sol": { + "keccak256": "0x08368aba5f1bb83eb57e9f8d31a04edee4be69159b4844a6443f65100917011c", + "urls": [ + "bzz-raw://789244f53fb8b25f4bacb8ac0b9c2f5ea2067a9c5c7bd13fd00e10618e52e2ff", + "dweb:/ipfs/QmVSbGSyDpfL6UfyvaMBQHmV9u52wway1h3caJnvXVgkvn" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/interfaces/IMSA.sol": { + "keccak256": "0x649ef44dfc5ba9b485b31cda765335e96f35aa6e595fd8d86c28a62aa8982cbe", + "urls": [ + "bzz-raw://43dac226bde7880ef807331972ec074d1bd046ca0bd776c69fec026416469e05", + "dweb:/ipfs/QmWjEtYgMggSGBiQp1JaowyVux27a2WCGVmku4hn1oLcVn" + ], + "license": "MIT" + }, + "node_modules/erc7579/src/lib/ModeLib.sol": { + "keccak256": "0x02ce0fc8805d1427841f32e2335157e3fae18e99d5c49ba46d53e12fcd1a5185", + "urls": [ + "bzz-raw://9900d0dfb593b136a058a16f1817f60d5096c3eca6adea662381e12c241b14b4", + "dweb:/ipfs/QmdsfLLtfzY9oEpZxk1Ve1PLuPQdphZcNK92L6mHa8n1h7" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 77 +} diff --git a/artifacts/interfaces/IModule.json b/artifacts/interfaces/IModule.json new file mode 100644 index 0000000..076b7e8 --- /dev/null +++ b/artifacts/interfaces/IModule.json @@ -0,0 +1,171 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7579Module.sol": "IModule" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +} diff --git a/artifacts/interfaces/ISafe.json b/artifacts/interfaces/ISafe.json new file mode 100644 index 0000000..1a874ca --- /dev/null +++ b/artifacts/interfaces/ISafe.json @@ -0,0 +1,462 @@ +{ + "abi": [ + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "checkSignatures", + "inputs": [ + { "name": "dataHash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "enableModule", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "execTransactionFromModule", + "inputs": [ + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "operation", + "type": "uint8", + "internalType": "enum ISafe.Operation" + } + ], + "outputs": [ + { "name": "success", "type": "bool", "internalType": "bool" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "execTransactionFromModuleReturnData", + "inputs": [ + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "operation", + "type": "uint8", + "internalType": "enum ISafe.Operation" + } + ], + "outputs": [ + { "name": "success", "type": "bool", "internalType": "bool" }, + { "name": "returnData", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getModulesPaginated", + "inputs": [ + { "name": "start", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getStorageAt", + "inputs": [ + { "name": "offset", "type": "uint256", "internalType": "uint256" }, + { "name": "length", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setFallbackHandler", + "inputs": [ + { "name": "handler", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setup", + "inputs": [ + { "name": "_owners", "type": "address[]", "internalType": "address[]" }, + { "name": "_threshold", "type": "uint256", "internalType": "uint256" }, + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "fallbackHandler", + "type": "address", + "internalType": "address" + }, + { + "name": "paymentToken", + "type": "address", + "internalType": "address" + }, + { "name": "payment", "type": "uint256", "internalType": "uint256" }, + { + "name": "paymentReceiver", + "type": "address", + "internalType": "address payable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "signedMessages", + "inputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "simulateAndRevert", + "inputs": [ + { + "name": "targetContract", + "type": "address", + "internalType": "address" + }, + { "name": "calldataPayload", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "VERSION()": "ffa1ad74", + "checkSignatures(bytes32,bytes,bytes)": "934f3a11", + "domainSeparator()": "f698da25", + "enableModule(address)": "610b5925", + "execTransactionFromModule(address,uint256,bytes,uint8)": "468721a7", + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": "5229073f", + "getModulesPaginated(address,uint256)": "cc2f8452", + "getStorageAt(uint256,uint256)": "5624b25b", + "setFallbackHandler(address)": "f08a0323", + "setup(address[],uint256,address,bytes,address,address,uint256,address)": "b63e800d", + "signedMessages(bytes32)": "5ae6bd37", + "simulateAndRevert(address,bytes)": "b4faba09" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"checkSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum ISafe.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum ISafe.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModuleReturnData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"start\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getModulesPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"paymentReceiver\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"signedMessages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"checkSignatures(bytes32,bytes,bytes)\":{\"details\":\"Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise.\",\"params\":{\"data\":\"That should be signed (this is passed to an external validator contract)\",\"dataHash\":\"Hash of the data (could be either a message hash or transaction hash)\",\"signatures\":\"Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash.\"}},\"domainSeparator()\":{\"details\":\"Returns the domain separator for this contract, as defined in the EIP-712 standard.\",\"returns\":{\"_0\":\"bytes32 The domain separator hash.\"}},\"enableModule(address)\":{\"details\":\"This can only be done via a Safe transaction.\",\"params\":{\"module\":\"Module to be enabled.\"}},\"execTransactionFromModule(address,uint256,bytes,uint8)\":{\"details\":\"Allows a Module to execute a Safe transaction without any further confirmations.\",\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"}},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"params\":{\"data\":\"Data payload of module transaction.\",\"operation\":\"Operation type of module transaction.\",\"to\":\"Destination address of module transaction.\",\"value\":\"Ether value of module transaction.\"},\"returns\":{\"returnData\":\"Data returned by the call.\",\"success\":\"Boolean flag indicating if the call succeeded.\"}},\"getModulesPaginated(address,uint256)\":{\"details\":\"Returns array of modules.\",\"params\":{\"pageSize\":\"Maximum number of modules that should be returned.\",\"start\":\"Start of the page.\"},\"returns\":{\"array\":\"Array of modules.\",\"next\":\"Start of the next page.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"enableModule(address)\":{\"notice\":\"Enables the module `module` for the Safe.\"},\"execTransactionFromModuleReturnData(address,uint256,bytes,uint8)\":{\"notice\":\"Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISafe.sol\":\"ISafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"src/interfaces/ISafe.sol\":{\"keccak256\":\"0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457\",\"dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "VERSION", + "outputs": [ + { "internalType": "string", "name": "", "type": "string" } + ] + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "dataHash", + "type": "bytes32" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "checkSignatures" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "enableModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum ISafe.Operation", + "name": "operation", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execTransactionFromModule", + "outputs": [ + { "internalType": "bool", "name": "success", "type": "bool" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum ISafe.Operation", + "name": "operation", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execTransactionFromModuleReturnData", + "outputs": [ + { "internalType": "bool", "name": "success", "type": "bool" }, + { "internalType": "bytes", "name": "returnData", "type": "bytes" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "start", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getModulesPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "uint256", "name": "offset", "type": "uint256" }, + { "internalType": "uint256", "name": "length", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getStorageAt", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "handler", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setFallbackHandler" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_owners", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "address", + "name": "fallbackHandler", + "type": "address" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { "internalType": "uint256", "name": "payment", "type": "uint256" }, + { + "internalType": "address payable", + "name": "paymentReceiver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setup" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "signedMessages", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "calldataPayload", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "simulateAndRevert" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "checkSignatures(bytes32,bytes,bytes)": { + "details": "Checks whether the signature provided is valid for the provided data, hash. Will revert otherwise.", + "params": { + "data": "That should be signed (this is passed to an external validator contract)", + "dataHash": "Hash of the data (could be either a message hash or transaction hash)", + "signatures": "Signature data that should be verified. Can be ECDSA signature, contract signature (EIP-1271) or approved hash." + } + }, + "domainSeparator()": { + "details": "Returns the domain separator for this contract, as defined in the EIP-712 standard.", + "returns": { "_0": "bytes32 The domain separator hash." } + }, + "enableModule(address)": { + "details": "This can only be done via a Safe transaction.", + "params": { "module": "Module to be enabled." } + }, + "execTransactionFromModule(address,uint256,bytes,uint8)": { + "details": "Allows a Module to execute a Safe transaction without any further confirmations.", + "params": { + "data": "Data payload of module transaction.", + "operation": "Operation type of module transaction.", + "to": "Destination address of module transaction.", + "value": "Ether value of module transaction." + } + }, + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": { + "params": { + "data": "Data payload of module transaction.", + "operation": "Operation type of module transaction.", + "to": "Destination address of module transaction.", + "value": "Ether value of module transaction." + }, + "returns": { + "returnData": "Data returned by the call.", + "success": "Boolean flag indicating if the call succeeded." + } + }, + "getModulesPaginated(address,uint256)": { + "details": "Returns array of modules.", + "params": { + "pageSize": "Maximum number of modules that should be returned.", + "start": "Start of the page." + }, + "returns": { + "array": "Array of modules.", + "next": "Start of the next page." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "enableModule(address)": { + "notice": "Enables the module `module` for the Safe." + }, + "execTransactionFromModuleReturnData(address,uint256,bytes,uint8)": { + "notice": "Execute `operation` (0: Call, 1: DelegateCall) to `to` with `value` (Native Token) and return data" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/ISafe.sol": "ISafe" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "src/interfaces/ISafe.sol": { + "keccak256": "0x1e8b6e12f66c5ea5609ea89048e9985bc921c69fdfbbf54315c40c64dc5f9a6f", + "urls": [ + "bzz-raw://dab4c6c2fdb2418c41e7acce370b9be26b4d66f9654d4f04b6aacdae1aa73457", + "dweb:/ipfs/QmTbkzmhvMHwhLMpDBEYFscrkAkfEtnkbhGYVVMkVP7Qx4" + ], + "license": "LGPL-3.0-only" + } + }, + "version": 1 + }, + "id": 127 +} diff --git a/artifacts/interfaces/ISafe7579.json b/artifacts/interfaces/ISafe7579.json new file mode 100644 index 0000000..921cd00 --- /dev/null +++ b/artifacts/interfaces/ISafe7579.json @@ -0,0 +1,1397 @@ +{ + "abi": [ + { + "type": "function", + "name": "accountId", + "inputs": [], + "outputs": [ + { + "name": "accountImplementationId", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "executeFromExecutor", + "inputs": [ + { "name": "mode", "type": "bytes32", "internalType": "ModeCode" }, + { + "name": "executionCalldata", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { "name": "returnDatas", "type": "bytes[]", "internalType": "bytes[]" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActiveHook", + "inputs": [ + { "name": "selector", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [ + { "name": "hook", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getExecutorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "size", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNonce", + "inputs": [ + { "name": "safe", "type": "address", "internalType": "address" }, + { "name": "validator", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "nonce", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorsPaginated", + "inputs": [ + { "name": "cursor", "type": "address", "internalType": "address" }, + { "name": "pageSize", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "array", "type": "address[]", "internalType": "address[]" }, + { "name": "next", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initializeAccount", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "executors", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "fallbacks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "hooks", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + }, + { + "name": "registryInit", + "type": "tuple", + "internalType": "struct RegistryInit", + "components": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initializeAccountWithValidators", + "inputs": [ + { + "name": "validators", + "type": "tuple[]", + "internalType": "struct ModuleInit[]", + "components": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "installModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "initData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isModuleInstalled", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "additionalContext", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { "name": "magicValue", "type": "bytes4", "internalType": "bytes4" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setRegistry", + "inputs": [ + { + "name": "registry", + "type": "address", + "internalType": "contract IERC7484" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint8", "internalType": "uint8" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsExecutionMode", + "inputs": [ + { "name": "encodedMode", "type": "bytes32", "internalType": "ModeCode" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsModule", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uninstallModule", + "inputs": [ + { "name": "moduleType", "type": "uint256", "internalType": "uint256" }, + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "deInitData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "missingAccountFunds", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "packedValidSig", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ERC7484RegistryConfigured", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "registry", + "type": "address", + "indexed": true, + "internalType": "contract IERC7484" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleInstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleUninstalled", + "inputs": [ + { + "name": "moduleTypeId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "module", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "FallbackInstalled", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "HookAlreadyInstalled", + "inputs": [ + { "name": "currentHook", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "InvalidFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { "type": "error", "name": "InvalidHookType", "inputs": [] }, + { "type": "error", "name": "InvalidInput", "inputs": [] }, + { + "type": "error", + "name": "InvalidModule", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "InvalidModuleType", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "moduleType", "type": "uint256", "internalType": "uint256" } + ] + }, + { + "type": "error", + "name": "NoFallbackHandler", + "inputs": [ + { "name": "msgSig", "type": "bytes4", "internalType": "bytes4" } + ] + }, + { + "type": "error", + "name": "UnsupportedCallType", + "inputs": [ + { "name": "callType", "type": "bytes1", "internalType": "CallType" } + ] + }, + { + "type": "error", + "name": "UnsupportedExecType", + "inputs": [ + { "name": "execType", "type": "bytes1", "internalType": "ExecType" } + ] + }, + { + "type": "error", + "name": "UnsupportedModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "accountId()": "9cfd7cff", + "domainSeparator()": "f698da25", + "execute(bytes32,bytes)": "e9ae5c53", + "executeFromExecutor(bytes32,bytes)": "d691c964", + "getActiveHook()": "0a664dba", + "getActiveHook(bytes4)": "b875d5d8", + "getExecutorsPaginated(address,uint256)": "ea5f61d0", + "getNonce(address,address)": "d828435d", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4", + "getValidatorsPaginated(address,uint256)": "5faac46b", + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": "540fb4f9", + "initializeAccountWithValidators((address,bytes)[])": "79aad60e", + "installModule(uint256,address,bytes)": "9517e29f", + "isModuleInstalled(uint256,address,bytes)": "112d3a7d", + "isValidSignature(bytes32,bytes)": "1626ba7e", + "setRegistry(address,address[],uint8)": "eab77e17", + "supportsExecutionMode(bytes32)": "d03c7914", + "supportsModule(uint256)": "f2dc691d", + "uninstallModule(uint256,address,bytes)": "a71763a8", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": "19822f7c" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"FallbackInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currentHook\",\"type\":\"address\"}],\"name\":\"HookAlreadyInstalled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"InvalidCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"InvalidFallbackHandler\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidHookType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"InvalidModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"InvalidModuleType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"msgSig\",\"type\":\"bytes4\"}],\"name\":\"NoFallbackHandler\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"CallType\",\"name\":\"callType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedCallType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ExecType\",\"name\":\"execType\",\"type\":\"bytes1\"}],\"name\":\"UnsupportedExecType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"UnsupportedModuleType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"ERC7484RegistryConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleInstalled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleUninstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accountId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"accountImplementationId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"mode\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"executionCalldata\",\"type\":\"bytes\"}],\"name\":\"executeFromExecutor\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"returnDatas\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActiveHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"name\":\"getExecutorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"cursor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"executors\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"fallbacks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"hooks\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"internalType\":\"struct RegistryInit\",\"name\":\"registryInit\",\"type\":\"tuple\"}],\"name\":\"initializeAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleInit[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"initializeAccountWithValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"name\":\"installModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"additionalContext\",\"type\":\"bytes\"}],\"name\":\"isModuleInstalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC7484\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"}],\"name\":\"setRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ModeCode\",\"name\":\"encodedMode\",\"type\":\"bytes32\"}],\"name\":\"supportsExecutionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"supportsModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"deInitData\",\"type\":\"bytes\"}],\"name\":\"uninstallModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"packedValidSig\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth, Konrad Kopp (@kopy-kat)\",\"kind\":\"dev\",\"methods\":{\"accountId()\":{\"details\":\"Returns the account id of the smart account\",\"returns\":{\"accountImplementationId\":\"the account id of the smart account the accountId should be structured like so: \\\"vendorname.accountname.semver\\\"\"}},\"execute(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"executeFromExecutor(bytes32,bytes)\":{\"details\":\"Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert\",\"params\":{\"executionCalldata\":\"The encoded execution call data\",\"mode\":\"The encoded execution mode of the transaction. See ModeLib.sol for details\"}},\"getNonce(address,address)\":{\"params\":{\"safe\":\"address of safe account\",\"validator\":\"ERC7579 validator to encode\"}},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"params\":{\"executors\":\"executor modules and initData\",\"fallbacks\":\"fallback modules and initData\",\"hooks\":\"hook module and initData\",\"registryInit\":\"(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed\",\"validators\":\"validator modules and initData\"}},\"initializeAccountWithValidators((address,bytes)[])\":{\"details\":\"it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad\"},\"installModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"initData\":\"arbitrary data that may be required on the module during `onInstall` initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types\"}},\"isModuleInstalled(uint256,address,bytes)\":{\"params\":{\"additionalContext\":\"additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types\"}},\"isValidSignature(bytes32,bytes)\":{\"params\":{\"data\":\"abi.encodePacked(address validationModule, bytes signatures)\",\"hash\":\"message hash of ERC1271 request\"}},\"setRegistry(address,address[],uint8)\":{\"params\":{\"attesters\":\"list of attesters\",\"registry\":\"IERC7484 registry\",\"threshold\":\"number of attesters required\"}},\"supportsExecutionMode(bytes32)\":{\"params\":{\"encodedMode\":\"the encoded mode\"}},\"supportsModule(uint256)\":{\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec\"}},\"uninstallModule(uint256,address,bytes)\":{\"details\":\"The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called\",\"params\":{\"deInitData\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization.\",\"module\":\"the module address\",\"moduleType\":\"the module type ID according the ERC-7579 spec\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers\"}},\"title\":\"ERC7579 Adapter for Safe accounts. creates full ERC7579 compliance to Safe accounts\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getActiveHook()\":{\"notice\":\"Get the current active global hook\"},\"getActiveHook(bytes4)\":{\"notice\":\"Get the current active selector hook\"},\"getNonce(address,address)\":{\"notice\":\"Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator\"},\"initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))\":{\"notice\":\"This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty\"},\"initializeAccountWithValidators((address,bytes)[])\":{\"notice\":\"This function is intended to be called by Launchpad.validateUserOp()\"},\"installModule(uint256,address,bytes)\":{\"notice\":\"Installs a 7579 Module of a certain type on the smart account\"},\"isModuleInstalled(uint256,address,bytes)\":{\"notice\":\"Function to check if the account has a certain module installed\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function\"},\"setRegistry(address,address[],uint8)\":{\"notice\":\"Configure the Safe7579 with a IERC7484 registry\"},\"supportsExecutionMode(bytes32)\":{\"notice\":\"Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)\"},\"supportsModule(uint256)\":{\"notice\":\"Function to check if the account supports installation of a certain module type Id\"},\"uninstallModule(uint256,address,bytes)\":{\"notice\":\"Uninstalls a Module of a certain type on the smart account.\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"ERC4337 v0.7 validation function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ISafe7579.sol\":\"ISafe7579\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e\",\"dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc\"]},\"node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol\":{\"keccak256\":\"0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc\",\"dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS\"]},\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b\",\"dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3\"]},\"src/ISafe7579.sol\":{\"keccak256\":\"0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98\",\"dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c\",\"dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F\"]},\"src/interfaces/IERC7579Account.sol\":{\"keccak256\":\"0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d\",\"dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]},\"src/lib/ModeLib.sol\":{\"keccak256\":\"0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0\",\"dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "FallbackInstalled" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "currentHook", + "type": "address" + } + ], + "type": "error", + "name": "HookAlreadyInstalled" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "InvalidCallType" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "InvalidFallbackHandler" + }, + { "inputs": [], "type": "error", "name": "InvalidHookType" }, + { "inputs": [], "type": "error", "name": "InvalidInput" }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "InvalidModule" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + } + ], + "type": "error", + "name": "InvalidModuleType" + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "msgSig", "type": "bytes4" } + ], + "type": "error", + "name": "NoFallbackHandler" + }, + { + "inputs": [ + { "internalType": "CallType", "name": "callType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedCallType" + }, + { + "inputs": [ + { "internalType": "ExecType", "name": "execType", "type": "bytes1" } + ], + "type": "error", + "name": "UnsupportedExecType" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "type": "error", + "name": "UnsupportedModuleType" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address", + "indexed": true + }, + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "ERC7484RegistryConfigured", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleInstalled", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "module", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ModuleUninstalled", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accountId", + "outputs": [ + { + "internalType": "string", + "name": "accountImplementationId", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "execute" + }, + { + "inputs": [ + { "internalType": "ModeCode", "name": "mode", "type": "bytes32" }, + { + "internalType": "bytes", + "name": "executionCalldata", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "executeFromExecutor", + "outputs": [ + { + "internalType": "bytes[]", + "name": "returnDatas", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "bytes4", "name": "selector", "type": "bytes4" } + ], + "stateMutability": "view", + "type": "function", + "name": "getActiveHook", + "outputs": [ + { "internalType": "address", "name": "hook", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "size", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getExecutorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "safe", "type": "address" }, + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNonce", + "outputs": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "cursor", "type": "address" }, + { "internalType": "uint256", "name": "pageSize", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function", + "name": "getValidatorsPaginated", + "outputs": [ + { + "internalType": "address[]", + "name": "array", + "type": "address[]" + }, + { "internalType": "address", "name": "next", "type": "address" } + ] + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "executors", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "fallbacks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct ModuleInit[]", + "name": "hooks", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + }, + { + "internalType": "struct RegistryInit", + "name": "registryInit", + "type": "tuple", + "components": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint8", + "name": "threshold", + "type": "uint8" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccount" + }, + { + "inputs": [ + { + "internalType": "struct ModuleInit[]", + "name": "validators", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "module", + "type": "address" + }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initializeAccountWithValidators" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "initData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "installModule" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "bytes", + "name": "additionalContext", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleInstalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "magicValue", "type": "bytes4" } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC7484", + "name": "registry", + "type": "address" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { "internalType": "uint8", "name": "threshold", "type": "uint8" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setRegistry" + }, + { + "inputs": [ + { + "internalType": "ModeCode", + "name": "encodedMode", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsExecutionMode", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsModule", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleType", + "type": "uint256" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "bytes", "name": "deInitData", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "uninstallModule" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "missingAccountFunds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { + "internalType": "uint256", + "name": "packedValidSig", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "accountId()": { + "details": "Returns the account id of the smart account", + "returns": { + "accountImplementationId": "the account id of the smart account the accountId should be structured like so: \"vendorname.accountname.semver\"" + } + }, + "execute(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by ERC-4337 EntryPoint.solIf a global hook and/or selector hook is set, it will be calledAccessControl: only Self of Entrypoint can install modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "executeFromExecutor(bytes32,bytes)": { + "details": "Executes a transaction on behalf of the Safe account. This function is intended to be called by executor modulesIf a global hook and/or selector hook is set, it will be calledAccessControl: only enabled executor modules Safe7579 supports the following feature set: CallTypes: - CALLTYPE_SINGLE - CALLTYPE_BATCH - CALLTYPE_DELEGATECALL ExecTypes: - EXECTYPE_DEFAULT (revert if not successful) - EXECTYPE_TRY If a different mode is selected, this function will revert", + "params": { + "executionCalldata": "The encoded execution call data", + "mode": "The encoded execution mode of the transaction. See ModeLib.sol for details" + } + }, + "getNonce(address,address)": { + "params": { + "safe": "address of safe account", + "validator": "ERC7579 validator to encode" + } + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "params": { + "executors": "executor modules and initData", + "fallbacks": "fallback modules and initData", + "hooks": "hook module and initData", + "registryInit": "(OPTIONAL) registry, attesters and threshold for IERC7484 Registry If not provided, the registry will be set to the zero address, and no registry checks will be performed", + "validators": "validator modules and initData" + } + }, + "initializeAccountWithValidators((address,bytes)[])": { + "details": "it will initialize the SentinelList4337 list for validators, and sstore all validatorsSince this function has to be 4337 compliant (storage access), only validator storage is acccessNote: this function DOES NOT call onInstall() on the validator modules or emit ModuleInstalled events. this has to be done by the launchpad" + }, + "installModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf the safe set a registry, ERC7484 registry will be queried before installingIf a global hook and/or selector hook is set, it will be called", + "params": { + "initData": "arbitrary data that may be required on the module during `onInstall` initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: MULTITYPE_MODULE (uint(0)) is a special type to install a module with multiple types" + } + }, + "isModuleInstalled(uint256,address,bytes)": { + "params": { + "additionalContext": "additional context data that the smart account may interpret to identifiy conditions under which the module is installed. usually this is not necessary, but for some special hooks that are stored in mappings, this param might be needed", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec Note: keep in mind that some contracts can be multiple module types at the same time. It thus may be necessary to query multiple module types" + } + }, + "isValidSignature(bytes32,bytes)": { + "params": { + "data": "abi.encodePacked(address validationModule, bytes signatures)", + "hash": "message hash of ERC1271 request" + } + }, + "setRegistry(address,address[],uint8)": { + "params": { + "attesters": "list of attesters", + "registry": "IERC7484 registry", + "threshold": "number of attesters required" + } + }, + "supportsExecutionMode(bytes32)": { + "params": { "encodedMode": "the encoded mode" } + }, + "supportsModule(uint256)": { + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec" + } + }, + "uninstallModule(uint256,address,bytes)": { + "details": "The module has to be initialized from msg.sender == SafeProxy, we thus use a delegatecall to DCUtil, which calls the onInstall/onUninstall function on the ERC7579 module and emits the ModuleInstall/ModuleUnintall eventsAccessControl: only Self of Entrypoint can install modulesIf a global hook and/or selector hook is set, it will be called", + "params": { + "deInitData": "arbitrary data that may be required on the module during `onUninstall` de-initialization.", + "module": "the module address", + "moduleType": "the module type ID according the ERC-7579 spec" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "details": "expects that a ERC7579 validator module is encoded within the UserOp nonce. if no validator module is provided, it will fallback to validate the transaction with Safe's signers" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getActiveHook()": { "notice": "Get the current active global hook" }, + "getActiveHook(bytes4)": { + "notice": "Get the current active selector hook" + }, + "getNonce(address,address)": { + "notice": "Safe7579 is using validator selection encoding in the userop nonce. to make it easier for SDKs / devs to integrate, this function can be called to get the next nonce for a specific validator" + }, + "initializeAccount((address,bytes)[],(address,bytes)[],(address,bytes)[],(address,bytes)[],(address,address[],uint8))": { + "notice": "This function can be called by the Launchpad.initSafe7579() or by already existing Safes that want to use Safe7579 if this is called by the Launchpad, it is expected that launchpadValidators() was called previously, and the param validators is empty" + }, + "initializeAccountWithValidators((address,bytes)[])": { + "notice": "This function is intended to be called by Launchpad.validateUserOp()" + }, + "installModule(uint256,address,bytes)": { + "notice": "Installs a 7579 Module of a certain type on the smart account" + }, + "isModuleInstalled(uint256,address,bytes)": { + "notice": "Function to check if the account has a certain module installed" + }, + "isValidSignature(bytes32,bytes)": { + "notice": "Will use Safe's signed messages or checkSignatures features or ERC7579 validation modules if no signature is provided, it makes use of Safe's signedMessages if address(0) or a non-installed validator module is provided, it will use Safe's checkSignatures if a valid validator module is provided, it will use the module's validateUserOp function" + }, + "setRegistry(address,address[],uint8)": { + "notice": "Configure the Safe7579 with a IERC7484 registry" + }, + "supportsExecutionMode(bytes32)": { + "notice": "Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol)" + }, + "supportsModule(uint256)": { + "notice": "Function to check if the account supports installation of a certain module type Id" + }, + "uninstallModule(uint256,address,bytes)": { + "notice": "Uninstalls a Module of a certain type on the smart account." + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)": { + "notice": "ERC4337 v0.7 validation function" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/ISafe7579.sol": "ISafe7579" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/core/Helpers.sol": { + "keccak256": "0x6247e011a6cb0b263b3aa098822977181674d91b62e5bdfe04c6e66f72da25d6", + "urls": [ + "bzz-raw://ca829a69b3fbc74fec8e140d42a2bf93bc3512609272f031c846470f61f0ab7e", + "dweb:/ipfs/QmP3r3MBgAN39KeVB1rCGJWwcBcotNt26ALtAR54poQ1Jc" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/core/UserOperationLib.sol": { + "keccak256": "0x9d50ece985d35f82e33e5da417595c86fac10449e3d10895d08363d33aad454b", + "urls": [ + "bzz-raw://b1d11cc364c8bf7ed5388268c895b5ffed16e87dfbcb320ddeeba5e7974315dc", + "dweb:/ipfs/QmYSpvjxEjweietQrYZagwQ52ipy7eXx4rwvnTzXKeGeMS" + ], + "license": "GPL-3.0" + }, + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/DataTypes.sol": { + "keccak256": "0x7b2ece19f0e82036352db8e52c8ca68ee225cf927872848cfdaefac774e0174d", + "urls": [ + "bzz-raw://1901f64511210507cc87df2d240063890f11ff1025ae61c1cc7594b2e648786b", + "dweb:/ipfs/QmPqTthdY7rCb1utBCVcX9F5oj3suEUFEb8xJEYvSrQzH3" + ], + "license": "GPL-3.0" + }, + "src/ISafe7579.sol": { + "keccak256": "0x68b257c2033b7eee3d99edb15fb2be03a82e8a3f7cd250a584c5e98aff86ca8b", + "urls": [ + "bzz-raw://c5e8f686ddc576f82f9980038e79f9b2768df246fbea928dc6a05068bb9eca98", + "dweb:/ipfs/QmbbU5EiHJVkzyPgAMj5HfoX6fEuFYcq1SnsZGjHgJU8X9" + ], + "license": "MIT" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xac70106497cbca5b521ad3c27bfa14721aea86bf6f11e331388778f36cf669ff", + "urls": [ + "bzz-raw://fef31872d4e5d1d589cbadea178651df9991dcf89770fcb5119752c6d6d4bf1c", + "dweb:/ipfs/QmbYTruqW1PDfnmJCqij4mRixMetCf1P5tc8K67MJtGA6F" + ], + "license": "MIT" + }, + "src/interfaces/IERC7579Account.sol": { + "keccak256": "0xc388e47f74f872e342e72d8bd57b428c6910b9e38c50bd3512d9069291dd041d", + "urls": [ + "bzz-raw://05971661f97add5befb5e89c693add53624bc63166255d1cda9ae4a1c423c47d", + "dweb:/ipfs/QmVEuEvUadDkPDaGDrFDYh5D4pCvn7JyHhGJThB3UaGJxe" + ], + "license": "MIT" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + }, + "src/lib/ModeLib.sol": { + "keccak256": "0x110ff117c12644827ba62776ef47e3936ee6b233037710907c841c3c7c96b05c", + "urls": [ + "bzz-raw://ed405d749d1bed879b6c02cc4a4dac096481ffa7348cf9cc91889ec5ee6b61f0", + "dweb:/ipfs/QmNPySGT6ZLaZBJEnmCDUxEjiMpBx2hByhUW2dwtkr7Pwc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 112 +} diff --git a/artifacts/interfaces/ISafeOp.json b/artifacts/interfaces/ISafeOp.json new file mode 100644 index 0000000..1ab230d --- /dev/null +++ b/artifacts/interfaces/ISafeOp.json @@ -0,0 +1,209 @@ +{ + "abi": [ + { + "type": "function", + "name": "domainSeparator", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSafeOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "entryPoint", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "operationData", "type": "bytes", "internalType": "bytes" }, + { "name": "validAfter", "type": "uint48", "internalType": "uint48" }, + { "name": "validUntil", "type": "uint48", "internalType": "uint48" }, + { "name": "signatures", "type": "bytes", "internalType": "bytes" } + ], + "stateMutability": "view" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "domainSeparator()": "f698da25", + "getSafeOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),address)": "55d559f4" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSafeOp\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"operationData\",\"type\":\"bytes\"},{\"internalType\":\"uint48\",\"name\":\"validAfter\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"validUntil\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ISafeOp.sol\":\"ISafeOp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/ISafeOp.sol\":{\"keccak256\":\"0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2\",\"dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "address", + "name": "entryPoint", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSafeOp", + "outputs": [ + { + "internalType": "bytes", + "name": "operationData", + "type": "bytes" + }, + { + "internalType": "uint48", + "name": "validAfter", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "validUntil", + "type": "uint48" + }, + { "internalType": "bytes", "name": "signatures", "type": "bytes" } + ] + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/ISafeOp.sol": "ISafeOp" }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/ISafeOp.sol": { + "keccak256": "0x1f001973f472988b1f5c502ccb6f8e59f2d920f2bf70728e616747d8d8d761fa", + "urls": [ + "bzz-raw://74abf8b7be99682d91511aeed0a7d2a09cfe3aa2d72d026e573fc5bf56c479b2", + "dweb:/ipfs/QmdHWrassTuBH5TVjmcazaG4tUvZJEVSyY1vY8gf6FGXnc" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 128 +} diff --git a/artifacts/interfaces/IValidator.json b/artifacts/interfaces/IValidator.json new file mode 100644 index 0000000..329dc33 --- /dev/null +++ b/artifacts/interfaces/IValidator.json @@ -0,0 +1,319 @@ +{ + "abi": [ + { + "type": "function", + "name": "isInitialized", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isModuleType", + "inputs": [ + { "name": "moduleTypeId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isValidSignatureWithSender", + "inputs": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onInstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onUninstall", + "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validateUserOp", + "inputs": [ + { + "name": "userOp", + "type": "tuple", + "internalType": "struct PackedUserOperation", + "components": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "nonce", "type": "uint256", "internalType": "uint256" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "callData", "type": "bytes", "internalType": "bytes" }, + { + "name": "accountGasLimits", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "preVerificationGas", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "gasFees", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "paymasterAndData", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "userOpHash", "type": "bytes32", "internalType": "bytes32" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "isInitialized(address)": "d60b347f", + "isModuleType(uint256)": "ecd05961", + "isValidSignatureWithSender(address,bytes32,bytes)": "f551e2ee", + "onInstall(bytes)": "6d61fe70", + "onUninstall(bytes)": "8a91b0e3", + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": "97003203" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"moduleTypeId\",\"type\":\"uint256\"}],\"name\":\"isModuleType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"isValidSignatureWithSender\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onInstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onUninstall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isInitialized(address)\":{\"details\":\"Returns if the module was already initialized for a provided smartaccount\"},\"isModuleType(uint256)\":{\"details\":\"Returns boolean value if module is a certain type\",\"params\":{\"moduleTypeId\":\"the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise\"}},\"onInstall(bytes)\":{\"details\":\"This function is called by the smart account during installation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)\"}},\"onUninstall(bytes)\":{\"details\":\"This function is called by the smart account during uninstallation of the module\",\"params\":{\"data\":\"arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)\":{\"details\":\"Validates a transaction on behalf of the account. This function is intended to be called by the MSA during the ERC-4337 validaton phase Note: solely relying on bytes32 hash and signature is not suffcient for some validation implementations (i.e. SessionKeys often need access to userOp.calldata)\",\"params\":{\"userOp\":\"The user operation to be validated. The userOp MUST NOT contain any metadata. The MSA MUST clean up the userOp before sending it to the validator.\",\"userOpHash\":\"The hash of the user operation to be validated\"},\"returns\":{\"_0\":\"return value according to ERC-4337\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isValidSignatureWithSender(address,bytes32,bytes)\":{\"notice\":\"Validator can be used for ERC-1271 validation\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7579Module.sol\":\"IValidator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ERC4337/=node_modules/@ERC4337/\",\":@gnosis.pm/=node_modules/@gnosis.pm/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@prb/math/=node_modules/@prb/math/src/\",\":@rhinestone/=node_modules/@rhinestone/\",\":@safe-global/=node_modules/@safe-global/\",\":account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":erc7579/=node_modules/erc7579/src/\",\":forge-std/=node_modules/forge-std/src/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":module-bases/=node_modules/@rhinestone/module-bases/src/\",\":modulekit/=node_modules/@rhinestone/modulekit/src/\",\":sentinellist/=node_modules/@rhinestone/sentinellist/src/\",\":solady/=node_modules/solady/src/\",\":solarray/=node_modules/solarray/src/\"]},\"sources\":{\"node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol\":{\"keccak256\":\"0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be\",\"dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3\"]},\"src/interfaces/IERC7579Module.sol\":{\"keccak256\":\"0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230\",\"urls\":[\"bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c\",\"dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.26+commit.8a97fa7a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isInitialized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "moduleTypeId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isModuleType", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" }, + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignatureWithSender", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" } + ] + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onInstall" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "onUninstall" + }, + { + "inputs": [ + { + "internalType": "struct PackedUserOperation", + "name": "userOp", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "initCode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "accountGasLimits", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "preVerificationGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "gasFees", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "paymasterAndData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes32", + "name": "userOpHash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateUserOp", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "isInitialized(address)": { + "details": "Returns if the module was already initialized for a provided smartaccount" + }, + "isModuleType(uint256)": { + "details": "Returns boolean value if module is a certain type", + "params": { + "moduleTypeId": "the module type ID according the ERC-7579 spec MUST return true if the module is of the given type and false otherwise" + } + }, + "onInstall(bytes)": { + "details": "This function is called by the smart account during installation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onInstall` initialization MUST revert on error (i.e. if module is already enabled)" + } + }, + "onUninstall(bytes)": { + "details": "This function is called by the smart account during uninstallation of the module", + "params": { + "data": "arbitrary data that may be required on the module during `onUninstall` de-initialization MUST revert on error" + } + }, + "validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32)": { + "details": "Validates a transaction on behalf of the account. This function is intended to be called by the MSA during the ERC-4337 validaton phase Note: solely relying on bytes32 hash and signature is not suffcient for some validation implementations (i.e. SessionKeys often need access to userOp.calldata)", + "params": { + "userOp": "The user operation to be validated. The userOp MUST NOT contain any metadata. The MSA MUST clean up the userOp before sending it to the validator.", + "userOpHash": "The hash of the user operation to be validated" + }, + "returns": { "_0": "return value according to ERC-4337" } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "isValidSignatureWithSender(address,bytes32,bytes)": { + "notice": "Validator can be used for ERC-1271 validation" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@ERC4337/=node_modules/@ERC4337/", + "@gnosis.pm/=node_modules/@gnosis.pm/", + "@openzeppelin/=node_modules/@openzeppelin/", + "@prb/math/=node_modules/@prb/math/src/", + "@rhinestone/=node_modules/@rhinestone/", + "@safe-global/=node_modules/@safe-global/", + "account-abstraction-v0.6/=node_modules/@ERC4337/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/@ERC4337/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "erc7579/=node_modules/erc7579/src/", + "forge-std/=node_modules/forge-std/src/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", + "module-bases/=node_modules/@rhinestone/module-bases/src/", + "modulekit/=node_modules/@rhinestone/modulekit/src/", + "sentinellist/=node_modules/@rhinestone/sentinellist/src/", + "solady/=node_modules/solady/src/", + "solarray/=node_modules/solarray/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/interfaces/IERC7579Module.sol": "IValidator" + }, + "evmVersion": "paris", + "libraries": {} + }, + "sources": { + "node_modules/@ERC4337/account-abstraction/contracts/interfaces/PackedUserOperation.sol": { + "keccak256": "0x1129b46381db68eddbc5cb49e50664667b66b03c480453858e7b25eabe444359", + "urls": [ + "bzz-raw://499a948aba60480dba6e25c763b8d918f1c246eb7a3302e04f493e080f3295be", + "dweb:/ipfs/QmeRhhswf4NACcBKam2PyjpTP2ddSm648kah5kkQJsvwz3" + ], + "license": "GPL-3.0" + }, + "src/interfaces/IERC7579Module.sol": { + "keccak256": "0x1760c57d1a84f94d8891d1599f7c7a142d04d96e2ecc7946fe57d73c04f90230", + "urls": [ + "bzz-raw://ea30d5f2642b113dc1f093217cbe3f14928c3896d823c12a4b91cd299f91276c", + "dweb:/ipfs/QmbarceJ9XvHGw3cQWN4fBV1XCmiBvNJe8R4Q2DMujxGeQ" + ], + "license": null + } + }, + "version": 1 + }, + "id": 126 +}