{"abi":[{"type":"constructor","inputs":[{"name":"_token","type":"address","internalType":"contract ERC20"},{"name":"_sender","type":"address","internalType":"address"},{"name":"_shell","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"SENDER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"TOKEN","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ERC20"}],"stateMutability":"view"},{"type":"function","name":"peel","inputs":[{"name":"_layers","type":"tuple[]","internalType":"struct TransferOnion.Layer[]","components":[{"name":"recipient","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"shell","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"shell","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"}],"bytecode":{"object":"0x60c060405234801561001057600080fd5b50604051610a31380380610a3183398101604081905261002f91610069565b600160008190556001600160a01b039384166080529190921660a052556100ac565b6001600160a01b038116811461006657600080fd5b50565b60008060006060848603121561007e57600080fd5b835161008981610051565b602085015190935061009a81610051565b80925050604084015190509250925092565b60805160a0516109546100dd60003960008181606b01526102d601526000818160bc01526102b301526109546000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806343913491146100515780636050f2f81461006657806382bfefc8146100b7578063f11d2ff4146100de575b600080fd5b61006461005f366004610766565b6100f5565b005b61008d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61008d7f000000000000000000000000000000000000000000000000000000000000000081565b6100e760015481565b6040519081526020016100ae565b600260005403610166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155600154825190915b818110156103045760008482815181106101915761019161085d565b60200260200101519050838160000151826020015183604001516040516020016101e69392919073ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6040516020818303038152906040528051906020012014610289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5472616e736665724f6e696f6e3a20776861742061726520796f7520646f696e60448201527f6720696e206d79207377616d703f000000000000000000000000000000000000606482015260840161015d565b6040810151815160208301519195506102fb9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016917f000000000000000000000000000000000000000000000000000000000000000091610311565b50600101610175565b5050600190815560005550565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526103a69085906103ac565b50505050565b600061040e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166104bd9092919063ffffffff16565b8051909150156104b8578080602001905181019061042c919061088c565b6104b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161015d565b505050565b60606104cc84846000856104d6565b90505b9392505050565b606082471015610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161015d565b73ffffffffffffffffffffffffffffffffffffffff85163b6105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161060f91906108da565b60006040518083038185875af1925050503d806000811461064c576040519150601f19603f3d011682016040523d82523d6000602084013e610651565b606091505b509150915061066182828661066c565b979650505050505050565b6060831561067b5750816104cf565b82511561068b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015d91906108f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610711576107116106bf565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561075e5761075e6106bf565b604052919050565b6000602080838503121561077957600080fd5b823567ffffffffffffffff8082111561079157600080fd5b818501915085601f8301126107a557600080fd5b8135818111156107b7576107b76106bf565b6107c5848260051b01610717565b818152848101925060609182028401850191888311156107e457600080fd5b938501935b828510156108515780858a0312156108015760008081fd5b6108096106ee565b853573ffffffffffffffffffffffffffffffffffffffff8116811461082e5760008081fd5b8152858701358782015260408087013590820152845293840193928501926107e9565b50979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561089e57600080fd5b815180151581146104cf57600080fd5b60005b838110156108c95781810151838201526020016108b1565b838111156103a65750506000910152565b600082516108ec8184602087016108ae565b9190910192915050565b60208152600082518060208401526109158160408501602087016108ae565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea164736f6c634300080f000a","sourceMap":"633:1870:236:-:0;;;1348:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1701:1:49;1806:7;:22;;;-1:-1:-1;;;;;1417:14:236;;;;;1441:16;;;;;;1467:14;633:1870;;14:138:416;-1:-1:-1;;;;;96:31:416;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:475::-;260:6;268;276;329:2;317:9;308:7;304:23;300:32;297:52;;;345:1;342;335:12;297:52;377:9;371:16;396:38;428:5;396:38;:::i;:::-;503:2;488:18;;482:25;453:5;;-1:-1:-1;516:40:416;482:25;516:40;:::i;:::-;575:7;565:17;;;622:2;611:9;607:18;601:25;591:35;;157:475;;;;;:::o;:::-;633:1870:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806343913491146100515780636050f2f81461006657806382bfefc8146100b7578063f11d2ff4146100de575b600080fd5b61006461005f366004610766565b6100f5565b005b61008d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61008d7f000000000000000000000000000000000000000000000000000000000000000081565b6100e760015481565b6040519081526020016100ae565b600260005403610166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155600154825190915b818110156103045760008482815181106101915761019161085d565b60200260200101519050838160000151826020015183604001516040516020016101e69392919073ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b6040516020818303038152906040528051906020012014610289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5472616e736665724f6e696f6e3a20776861742061726520796f7520646f696e60448201527f6720696e206d79207377616d703f000000000000000000000000000000000000606482015260840161015d565b6040810151815160208301519195506102fb9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016917f000000000000000000000000000000000000000000000000000000000000000091610311565b50600101610175565b5050600190815560005550565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526103a69085906103ac565b50505050565b600061040e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166104bd9092919063ffffffff16565b8051909150156104b8578080602001905181019061042c919061088c565b6104b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161015d565b505050565b60606104cc84846000856104d6565b90505b9392505050565b606082471015610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161015d565b73ffffffffffffffffffffffffffffffffffffffff85163b6105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161060f91906108da565b60006040518083038185875af1925050503d806000811461064c576040519150601f19603f3d011682016040523d82523d6000602084013e610651565b606091505b509150915061066182828661066c565b979650505050505050565b6060831561067b5750816104cf565b82511561068b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015d91906108f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715610711576107116106bf565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561075e5761075e6106bf565b604052919050565b6000602080838503121561077957600080fd5b823567ffffffffffffffff8082111561079157600080fd5b818501915085601f8301126107a557600080fd5b8135818111156107b7576107b76106bf565b6107c5848260051b01610717565b818152848101925060609182028401850191888311156107e457600080fd5b938501935b828510156108515780858a0312156108015760008081fd5b6108096106ee565b853573ffffffffffffffffffffffffffffffffffffffff8116811461082e5760008081fd5b8152858701358782015260408087013590820152845293840193928501926107e9565b50979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561089e57600080fd5b815180151581146104cf57600080fd5b60005b838110156108c95781810151838201526020016108b1565b838111156103a65750506000910152565b600082516108ec8184602087016108ae565b9190910192915050565b60208152600082518060208401526109158160408501602087016108ae565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea164736f6c634300080f000a","sourceMap":"633:1870:236:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1616:885;;;;;;:::i;:::-;;:::i;:::-;;1024:31;;;;;;;;2539:42:416;2527:55;;;2509:74;;2497:2;2482:18;1024:31:236;;;;;;;;923:28;;;;;1098:20;;;;;;;;;2986:25:416;;;2974:2;2959:18;1098:20:236;2840:177:416;1616:885:236;1744:1:49;2325:7;;:19;2317:63;;;;;;;3224:2:416;2317:63:49;;;3206:21:416;3263:2;3243:18;;;3236:30;3302:33;3282:18;;;3275:61;3353:18;;2317:63:49;;;;;;;;;1744:1;2455:7;:18;;;1704:5:236::1;::::0;1736:14;;1704:5;;1760:707:::1;1784:6;1780:1;:10;1760:707;;;1807:18;1828:7;1836:1;1828:10;;;;;;;;:::i;:::-;;;;;;;1807:31;;2003:9;1955:5;:15;;;1972:5;:12;;;1986:5;:11;;;1944:54;;;;;;;;;3803:42:416::0;3791:55;;;;3773:74;;3878:2;3863:18;;3856:34;;;;3921:2;3906:18;;3899:34;3761:2;3746:18;;3571:368;1944:54:236::1;;;;;;;;;;;;;1934:65;;;;;;:78;1909:183;;;::::0;::::1;::::0;;4146:2:416;1909:183:236::1;::::0;::::1;4128:21:416::0;4185:2;4165:18;;;4158:30;4224:34;4204:18;;;4197:62;4295:16;4275:18;;;4268:44;4329:19;;1909:183:236::1;3944:410:416::0;1909:183:236::1;2158:11;::::0;::::1;::::0;2313:15;;2330:12:::1;::::0;::::1;::::0;2158:11;;-1:-1:-1;2282:61:236::1;::::0;:22:::1;:5;:22;::::0;2305:6:::1;::::0;2282:22:::1;:61::i;:::-;-1:-1:-1::0;2439:3:236::1;;1760:707;;;-1:-1:-1::0;;2477:5:236::1;:17:::0;;;2628:7:49;:22;-1:-1:-1;1616:885:236:o;974:241:57:-;1139:68;;;4571:42:416;4640:15;;;1139:68:57;;;4622:34:416;4692:15;;4672:18;;;4665:43;4724:18;;;;4717:34;;;1139:68:57;;;;;;;;;;4534:18:416;;;;1139:68:57;;;;;;;;;;1162:27;1139:68;;;1112:96;;1132:5;;1112:19;:96::i;:::-;974:241;;;;:::o;3747:706::-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;4192:27;;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:57;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;;;;5246:2:416;4351:85:57;;;5228:21:416;5285:2;5265:18;;;5258:30;5324:34;5304:18;;;5297:62;5395:12;5375:18;;;5368:40;5425:19;;4351:85:57;5044:406:416;4351:85:57;3817:636;3747:706;;:::o;3861:223:64:-;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;;3861:223;;;;;;:::o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;5657:2:416;5137:81:64;;;5639:21:416;5696:2;5676:18;;;5669:30;5735:34;5715:18;;;5708:62;5806:8;5786:18;;;5779:36;5832:19;;5137:81:64;5455:402:416;5137:81:64;1465:19;;;;5228:60;;;;;;;6064:2:416;5228:60:64;;;6046:21:416;6103:2;6083:18;;;6076:30;6142:31;6122:18;;;6115:59;6191:18;;5228:60:64;5862:353:416;5228:60:64;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;4948:499;-1:-1:-1;;;;;;;4948:499:64:o;7561:742::-;7707:12;7735:7;7731:566;;;-1:-1:-1;7765:10:64;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;7872:415;8259:12;8252:20;;;;;;;;;;;:::i;14:184:416:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:253;275:2;269:9;317:4;305:17;;352:18;337:34;;373:22;;;334:62;331:88;;;399:18;;:::i;:::-;435:2;428:22;203:253;:::o;461:334::-;532:2;526:9;588:2;578:13;;593:66;574:86;562:99;;691:18;676:34;;712:22;;;673:62;670:88;;;738:18;;:::i;:::-;774:2;767:22;461:334;;-1:-1:-1;461:334:416:o;800:1558::-;909:6;940:2;983;971:9;962:7;958:23;954:32;951:52;;;999:1;996;989:12;951:52;1039:9;1026:23;1068:18;1109:2;1101:6;1098:14;1095:34;;;1125:1;1122;1115:12;1095:34;1163:6;1152:9;1148:22;1138:32;;1208:7;1201:4;1197:2;1193:13;1189:27;1179:55;;1230:1;1227;1220:12;1179:55;1266:2;1253:16;1288:2;1284;1281:10;1278:36;;;1294:18;;:::i;:::-;1334:36;1366:2;1361;1358:1;1354:10;1350:19;1334:36;:::i;:::-;1404:15;;;1435:12;;;;-1:-1:-1;1466:4:416;1505:11;;;1497:20;;1493:29;;;1534:19;;;1531:39;;;1566:1;1563;1556:12;1531:39;1590:11;;;;1610:718;1626:6;1621:3;1618:15;1610:718;;;1706:2;1700:3;1691:7;1687:17;1683:26;1680:116;;;1750:1;1779:2;1775;1768:14;1680:116;1822:22;;:::i;:::-;1885:3;1872:17;1937:42;1928:7;1924:56;1915:7;1912:69;1902:167;;2023:1;2052:2;2048;2041:14;1902:167;2082:22;;2153:12;;;2140:26;2124:14;;;2117:50;2190:2;2241:12;;;2228:26;2212:14;;;2205:50;2268:18;;1643:12;;;;2306;;;;1610:718;;;-1:-1:-1;2347:5:416;800:1558;-1:-1:-1;;;;;;;800:1558:416:o;3382:184::-;3434:77;3431:1;3424:88;3531:4;3528:1;3521:15;3555:4;3552:1;3545:15;4762:277;4829:6;4882:2;4870:9;4861:7;4857:23;4853:32;4850:52;;;4898:1;4895;4888:12;4850:52;4930:9;4924:16;4983:5;4976:13;4969:21;4962:5;4959:32;4949:60;;5005:1;5002;4995:12;6220:258;6292:1;6302:113;6316:6;6313:1;6310:13;6302:113;;;6392:11;;;6386:18;6373:11;;;6366:39;6338:2;6331:10;6302:113;;;6433:6;6430:1;6427:13;6424:48;;;-1:-1:-1;;6468:1:416;6450:16;;6443:27;6220:258::o;6483:274::-;6612:3;6650:6;6644:13;6666:53;6712:6;6707:3;6700:4;6692:6;6688:17;6666:53;:::i;:::-;6735:16;;;;;6483:274;-1:-1:-1;;6483:274:416:o;6762:442::-;6911:2;6900:9;6893:21;6874:4;6943:6;6937:13;6986:6;6981:2;6970:9;6966:18;6959:34;7002:66;7061:6;7056:2;7045:9;7041:18;7036:2;7028:6;7024:15;7002:66;:::i;:::-;7120:2;7108:15;7125:66;7104:88;7089:104;;;;7195:2;7085:113;;6762:442;-1:-1:-1;;6762:442:416:o","linkReferences":{},"immutableReferences":{"117020":[{"start":188,"length":32},{"start":691,"length":32}],"117023":[{"start":107,"length":32},{"start":726,"length":32}]}},"methodIdentifiers":{"SENDER()":"6050f2f8","TOKEN()":"82bfefc8","peel((address,uint256,bytes32)[])":"43913491","shell()":"f11d2ff4"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_shell\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SENDER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"shell\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferOnion.Layer[]\",\"name\":\"_layers\",\"type\":\"tuple[]\"}],\"name\":\"peel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shell\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_sender\":\"Address of the sender to distribute from.\",\"_shell\":\"Initial shell of the onion.\",\"_token\":\"Address of the token to distribute.\"}},\"peel((address,uint256,bytes32)[])\":{\"params\":{\"_layers\":\"Array of onion layers to peel.\"}}},\"title\":\"TransferOnion\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"SENDER()\":{\"notice\":\"Address of the account to distribute tokens from.\"},\"TOKEN()\":{\"notice\":\"Address of the token to distribute.\"},\"constructor\":{\"notice\":\"Constructs a new TransferOnion.\"},\"peel((address,uint256,bytes32)[])\":{\"notice\":\"Peels layers from the onion and distributes tokens.\"},\"shell()\":{\"notice\":\"Current shell hash.\"}},\"notice\":\"TransferOnion is a hash onion for distributing tokens. The shell commits         to an ordered list of the token transfers and can be permissionlessly         unwrapped in order. The SENDER must `approve` this contract as         `transferFrom` is used to move the token balances.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/periphery/TransferOnion.sol\":\"TransferOnion\"},\"evmVersion\":\"london\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2\",\"dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0\",\"dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"src/periphery/TransferOnion.sol\":{\"keccak256\":\"0xc2b952a3a18fb7aa2aeda16050415e098bd7978a94107958a8758cd9b7067325\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4752c0fc4c4d66984d695510717050b9954b16e3a184fd5d0048ad71abb8b633\",\"dweb:/ipfs/QmYLv41EtHtg3cWGGTGzpdVAvW4fxEaR4jGQE7Uj3tC3Sj\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.15+commit.e14f2714"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract ERC20","name":"_token","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"bytes32","name":"_shell","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"view","type":"function","name":"SENDER","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TOKEN","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"struct TransferOnion.Layer[]","name":"_layers","type":"tuple[]","components":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"shell","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"peel"},{"inputs":[],"stateMutability":"view","type":"function","name":"shell","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"constructor":{"params":{"_sender":"Address of the sender to distribute from.","_shell":"Initial shell of the onion.","_token":"Address of the token to distribute."}},"peel((address,uint256,bytes32)[])":{"params":{"_layers":"Array of onion layers to peel."}}},"version":1},"userdoc":{"kind":"user","methods":{"SENDER()":{"notice":"Address of the account to distribute tokens from."},"TOKEN()":{"notice":"Address of the token to distribute."},"constructor":{"notice":"Constructs a new TransferOnion."},"peel((address,uint256,bytes32)[])":{"notice":"Peels layers from the onion and distributes tokens."},"shell()":{"notice":"Current shell hash."}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/periphery/TransferOnion.sol":"TransferOnion"},"evmVersion":"london","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol":{"keccak256":"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935","urls":["bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2","dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x24b04b8aacaaf1a4a0719117b29c9c3647b1f479c5ac2a60f5ff1bb6d839c238","urls":["bzz-raw://43e46da9d9f49741ecd876a269e71bc7494058d7a8e9478429998adb5bc3eaa0","dweb:/ipfs/QmUtp4cqzf22C5rJ76AabKADquGWcjsc33yjYXxXC4sDvy"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol":{"keccak256":"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329","urls":["bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95","dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29","urls":["bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6","dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10","urls":["bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487","dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"src/periphery/TransferOnion.sol":{"keccak256":"0xc2b952a3a18fb7aa2aeda16050415e098bd7978a94107958a8758cd9b7067325","urls":["bzz-raw://4752c0fc4c4d66984d695510717050b9954b16e3a184fd5d0048ad71abb8b633","dweb:/ipfs/QmYLv41EtHtg3cWGGTGzpdVAvW4fxEaR4jGQE7Uj3tC3Sj"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":50300,"contract":"src/periphery/TransferOnion.sol:TransferOnion","label":"_status","offset":0,"slot":"0","type":"t_uint256"},{"astId":117026,"contract":"src/periphery/TransferOnion.sol:TransferOnion","label":"shell","offset":0,"slot":"1","type":"t_bytes32"}],"types":{"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"version":1,"kind":"user","methods":{"SENDER()":{"notice":"Address of the account to distribute tokens from."},"TOKEN()":{"notice":"Address of the token to distribute."},"constructor":{"notice":"Constructs a new TransferOnion."},"peel((address,uint256,bytes32)[])":{"notice":"Peels layers from the onion and distributes tokens."},"shell()":{"notice":"Current shell hash."}},"notice":"TransferOnion is a hash onion for distributing tokens. The shell commits         to an ordered list of the token transfers and can be permissionlessly         unwrapped in order. The SENDER must `approve` this contract as         `transferFrom` is used to move the token balances."},"devdoc":{"version":1,"kind":"dev","methods":{"constructor":{"params":{"_sender":"Address of the sender to distribute from.","_shell":"Initial shell of the onion.","_token":"Address of the token to distribute."}},"peel((address,uint256,bytes32)[])":{"params":{"_layers":"Array of onion layers to peel."}}},"title":"TransferOnion"},"ast":{"absolutePath":"src/periphery/TransferOnion.sol","id":117128,"exportedSymbols":{"ERC20":[50915],"ReentrancyGuard":[50329],"SafeERC20":[52188],"TransferOnion":[117127]},"nodeType":"SourceUnit","src":"32:2472:236","nodes":[{"id":116996,"nodeType":"PragmaDirective","src":"32:23:236","nodes":[],"literals":["solidity","0.8",".15"]},{"id":116998,"nodeType":"ImportDirective","src":"57:87:236","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol","file":"@openzeppelin/contracts/security/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":117128,"sourceUnit":50330,"symbolAliases":[{"foreign":{"id":116997,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50329,"src":"66:15:236","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":117000,"nodeType":"ImportDirective","src":"145:70:236","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","nameLocation":"-1:-1:-1","scope":117128,"sourceUnit":50916,"symbolAliases":[{"foreign":{"id":116999,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50915,"src":"154:5:236","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":117002,"nodeType":"ImportDirective","src":"216:84:236","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":117128,"sourceUnit":52189,"symbolAliases":[{"foreign":{"id":117001,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52188,"src":"225:9:236","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":117127,"nodeType":"ContractDefinition","src":"633:1870:236","nodes":[{"id":117009,"nodeType":"UsingForDirective","src":"681:26:236","nodes":[],"global":false,"libraryName":{"id":117006,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":52188,"src":"687:9:236"},"typeName":{"id":117008,"nodeType":"UserDefinedTypeName","pathNode":{"id":117007,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":50915,"src":"701:5:236"},"referencedDeclaration":50915,"src":"701:5:236","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"}}},{"id":117016,"nodeType":"StructDefinition","src":"771:94:236","nodes":[],"canonicalName":"TransferOnion.Layer","members":[{"constant":false,"id":117011,"mutability":"mutable","name":"recipient","nameLocation":"802:9:236","nodeType":"VariableDeclaration","scope":117016,"src":"794:17:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117010,"name":"address","nodeType":"ElementaryTypeName","src":"794:7:236","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":117013,"mutability":"mutable","name":"amount","nameLocation":"829:6:236","nodeType":"VariableDeclaration","scope":117016,"src":"821:14:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":117012,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":117015,"mutability":"mutable","name":"shell","nameLocation":"853:5:236","nodeType":"VariableDeclaration","scope":117016,"src":"845:13:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":117014,"name":"bytes32","nodeType":"ElementaryTypeName","src":"845:7:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Layer","nameLocation":"778:5:236","scope":117127,"visibility":"public"},{"id":117020,"nodeType":"VariableDeclaration","src":"923:28:236","nodes":[],"constant":false,"documentation":{"id":117017,"nodeType":"StructuredDocumentation","src":"871:47:236","text":"@notice Address of the token to distribute."},"functionSelector":"82bfefc8","mutability":"immutable","name":"TOKEN","nameLocation":"946:5:236","scope":117127,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"},"typeName":{"id":117019,"nodeType":"UserDefinedTypeName","pathNode":{"id":117018,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":50915,"src":"923:5:236"},"referencedDeclaration":50915,"src":"923:5:236","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"}},"visibility":"public"},{"id":117023,"nodeType":"VariableDeclaration","src":"1024:31:236","nodes":[],"constant":false,"documentation":{"id":117021,"nodeType":"StructuredDocumentation","src":"958:61:236","text":"@notice Address of the account to distribute tokens from."},"functionSelector":"6050f2f8","mutability":"immutable","name":"SENDER","nameLocation":"1049:6:236","scope":117127,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117022,"name":"address","nodeType":"ElementaryTypeName","src":"1024:7:236","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"id":117026,"nodeType":"VariableDeclaration","src":"1098:20:236","nodes":[],"constant":false,"documentation":{"id":117024,"nodeType":"StructuredDocumentation","src":"1062:31:236","text":"@notice Current shell hash."},"functionSelector":"f11d2ff4","mutability":"mutable","name":"shell","nameLocation":"1113:5:236","scope":117127,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":117025,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1098:7:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":117050,"nodeType":"FunctionDefinition","src":"1348:140:236","nodes":[],"body":{"id":117049,"nodeType":"Block","src":"1407:81:236","nodes":[],"statements":[{"expression":{"id":117039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":117037,"name":"TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117020,"src":"1417:5:236","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":117038,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117030,"src":"1425:6:236","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"}},"src":"1417:14:236","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"}},"id":117040,"nodeType":"ExpressionStatement","src":"1417:14:236"},{"expression":{"id":117043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":117041,"name":"SENDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117023,"src":"1441:6:236","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":117042,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117032,"src":"1450:7:236","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1441:16:236","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":117044,"nodeType":"ExpressionStatement","src":"1441:16:236"},{"expression":{"id":117047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":117045,"name":"shell","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117026,"src":"1467:5:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":117046,"name":"_shell","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117034,"src":"1475:6:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1467:14:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":117048,"nodeType":"ExpressionStatement","src":"1467:14:236"}]},"documentation":{"id":117027,"nodeType":"StructuredDocumentation","src":"1125:218:236","text":"@notice Constructs a new TransferOnion.\n @param _token  Address of the token to distribute.\n @param _sender Address of the sender to distribute from.\n @param _shell  Initial shell of the onion."},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":117035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":117030,"mutability":"mutable","name":"_token","nameLocation":"1366:6:236","nodeType":"VariableDeclaration","scope":117050,"src":"1360:12:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"},"typeName":{"id":117029,"nodeType":"UserDefinedTypeName","pathNode":{"id":117028,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":50915,"src":"1360:5:236"},"referencedDeclaration":50915,"src":"1360:5:236","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"}},"visibility":"internal"},{"constant":false,"id":117032,"mutability":"mutable","name":"_sender","nameLocation":"1382:7:236","nodeType":"VariableDeclaration","scope":117050,"src":"1374:15:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117031,"name":"address","nodeType":"ElementaryTypeName","src":"1374:7:236","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":117034,"mutability":"mutable","name":"_shell","nameLocation":"1399:6:236","nodeType":"VariableDeclaration","scope":117050,"src":"1391:14:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":117033,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1391:7:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1359:47:236"},"returnParameters":{"id":117036,"nodeType":"ParameterList","parameters":[],"src":"1407:0:236"},"scope":117127,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":117126,"nodeType":"FunctionDefinition","src":"1616:885:236","nodes":[],"body":{"id":117125,"nodeType":"Block","src":"1674:827:236","nodes":[],"statements":[{"assignments":[117061],"declarations":[{"constant":false,"id":117061,"mutability":"mutable","name":"tempShell","nameLocation":"1692:9:236","nodeType":"VariableDeclaration","scope":117125,"src":"1684:17:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":117060,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1684:7:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":117063,"initialValue":{"id":117062,"name":"shell","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117026,"src":"1704:5:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1684:25:236"},{"assignments":[117065],"declarations":[{"constant":false,"id":117065,"mutability":"mutable","name":"length","nameLocation":"1727:6:236","nodeType":"VariableDeclaration","scope":117125,"src":"1719:14:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":117064,"name":"uint256","nodeType":"ElementaryTypeName","src":"1719:7:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":117068,"initialValue":{"expression":{"id":117066,"name":"_layers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117055,"src":"1736:7:236","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Layer_$117016_memory_ptr_$dyn_memory_ptr","typeString":"struct TransferOnion.Layer memory[] memory"}},"id":117067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1736:14:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1719:31:236"},{"body":{"id":117119,"nodeType":"Block","src":"1793:674:236","statements":[{"assignments":[117078],"declarations":[{"constant":false,"id":117078,"mutability":"mutable","name":"layer","nameLocation":"1820:5:236","nodeType":"VariableDeclaration","scope":117119,"src":"1807:18:236","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer"},"typeName":{"id":117077,"nodeType":"UserDefinedTypeName","pathNode":{"id":117076,"name":"Layer","nodeType":"IdentifierPath","referencedDeclaration":117016,"src":"1807:5:236"},"referencedDeclaration":117016,"src":"1807:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_storage_ptr","typeString":"struct TransferOnion.Layer"}},"visibility":"internal"}],"id":117082,"initialValue":{"baseExpression":{"id":117079,"name":"_layers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117055,"src":"1828:7:236","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Layer_$117016_memory_ptr_$dyn_memory_ptr","typeString":"struct TransferOnion.Layer memory[] memory"}},"id":117081,"indexExpression":{"id":117080,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117070,"src":"1836:1:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1828:10:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer memory"}},"nodeType":"VariableDeclarationStatement","src":"1807:31:236"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":117096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":117087,"name":"layer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117078,"src":"1955:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer memory"}},"id":117088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":117011,"src":"1955:15:236","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":117089,"name":"layer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117078,"src":"1972:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer memory"}},"id":117090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":117013,"src":"1972:12:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":117091,"name":"layer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117078,"src":"1986:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer memory"}},"id":117092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"shell","nodeType":"MemberAccess","referencedDeclaration":117015,"src":"1986:11:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":117085,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1944:3:236","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":117086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1944:10:236","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":117093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1944:54:236","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":117084,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1934:9:236","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":117094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1934:65:236","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":117095,"name":"tempShell","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117061,"src":"2003:9:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1934:78:236","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e736665724f6e696f6e3a20776861742061726520796f7520646f696e6720696e206d79207377616d703f","id":117097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2030:48:236","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc770c4319fc2b524adbcd4dd26d8e72c58657124c679b05539d773ad29dd0bc","typeString":"literal_string \"TransferOnion: what are you doing in my swamp?\""},"value":"TransferOnion: what are you doing in my swamp?"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc770c4319fc2b524adbcd4dd26d8e72c58657124c679b05539d773ad29dd0bc","typeString":"literal_string \"TransferOnion: what are you doing in my swamp?\""}],"id":117083,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1909:7:236","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":117098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1909:183:236","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":117099,"nodeType":"ExpressionStatement","src":"1909:183:236"},{"expression":{"id":117103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":117100,"name":"tempShell","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117061,"src":"2146:9:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":117101,"name":"layer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117078,"src":"2158:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer memory"}},"id":117102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"shell","nodeType":"MemberAccess","referencedDeclaration":117015,"src":"2158:11:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2146:23:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":117104,"nodeType":"ExpressionStatement","src":"2146:23:236"},{"expression":{"arguments":[{"id":117108,"name":"SENDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117023,"src":"2305:6:236","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":117109,"name":"layer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117078,"src":"2313:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer memory"}},"id":117110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":117011,"src":"2313:15:236","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":117111,"name":"layer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117078,"src":"2330:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_memory_ptr","typeString":"struct TransferOnion.Layer memory"}},"id":117112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":117013,"src":"2330:12:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":117105,"name":"TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117020,"src":"2282:5:236","typeDescriptions":{"typeIdentifier":"t_contract$_ERC20_$50915","typeString":"contract ERC20"}},"id":117107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":51965,"src":"2282:22:236","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$50993_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$50993_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":117113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2282:61:236","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":117114,"nodeType":"ExpressionStatement","src":"2282:61:236"},{"id":117118,"nodeType":"UncheckedBlock","src":"2411:46:236","statements":[{"expression":{"id":117116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2439:3:236","subExpression":{"id":117115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117070,"src":"2441:1:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":117117,"nodeType":"ExpressionStatement","src":"2439:3:236"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":117075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":117073,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117070,"src":"1780:1:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":117074,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117065,"src":"1784:6:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1780:10:236","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":117120,"initializationExpression":{"assignments":[117070],"declarations":[{"constant":false,"id":117070,"mutability":"mutable","name":"i","nameLocation":"1773:1:236","nodeType":"VariableDeclaration","scope":117120,"src":"1765:9:236","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":117069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1765:7:236","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":117072,"initialValue":{"hexValue":"30","id":117071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1777:1:236","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1765:13:236"},"nodeType":"ForStatement","src":"1760:707:236"},{"expression":{"id":117123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":117121,"name":"shell","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117026,"src":"2477:5:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":117122,"name":"tempShell","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117061,"src":"2485:9:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2477:17:236","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":117124,"nodeType":"ExpressionStatement","src":"2477:17:236"}]},"documentation":{"id":117051,"nodeType":"StructuredDocumentation","src":"1494:117:236","text":"@notice Peels layers from the onion and distributes tokens.\n @param _layers Array of onion layers to peel."},"functionSelector":"43913491","implemented":true,"kind":"function","modifiers":[{"id":117058,"kind":"modifierInvocation","modifierName":{"id":117057,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":50328,"src":"1661:12:236"},"nodeType":"ModifierInvocation","src":"1661:12:236"}],"name":"peel","nameLocation":"1625:4:236","parameters":{"id":117056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":117055,"mutability":"mutable","name":"_layers","nameLocation":"1645:7:236","nodeType":"VariableDeclaration","scope":117126,"src":"1630:22:236","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Layer_$117016_memory_ptr_$dyn_memory_ptr","typeString":"struct TransferOnion.Layer[]"},"typeName":{"baseType":{"id":117053,"nodeType":"UserDefinedTypeName","pathNode":{"id":117052,"name":"Layer","nodeType":"IdentifierPath","referencedDeclaration":117016,"src":"1630:5:236"},"referencedDeclaration":117016,"src":"1630:5:236","typeDescriptions":{"typeIdentifier":"t_struct$_Layer_$117016_storage_ptr","typeString":"struct TransferOnion.Layer"}},"id":117054,"nodeType":"ArrayTypeName","src":"1630:7:236","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_Layer_$117016_storage_$dyn_storage_ptr","typeString":"struct TransferOnion.Layer[]"}},"visibility":"internal"}],"src":"1629:24:236"},"returnParameters":{"id":117059,"nodeType":"ParameterList","parameters":[],"src":"1674:0:236"},"scope":117127,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":117004,"name":"ReentrancyGuard","nodeType":"IdentifierPath","referencedDeclaration":50329,"src":"659:15:236"},"id":117005,"nodeType":"InheritanceSpecifier","src":"659:15:236"}],"canonicalName":"TransferOnion","contractDependencies":[],"contractKind":"contract","documentation":{"id":117003,"nodeType":"StructuredDocumentation","src":"302:331:236","text":"@title  TransferOnion\n @notice TransferOnion is a hash onion for distributing tokens. The shell commits\n         to an ordered list of the token transfers and can be permissionlessly\n         unwrapped in order. The SENDER must `approve` this contract as\n         `transferFrom` is used to move the token balances."},"fullyImplemented":true,"linearizedBaseContracts":[117127,50329],"name":"TransferOnion","nameLocation":"642:13:236","scope":117128,"usedErrors":[]}],"license":"MIT"},"id":236}