{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "expectedLength",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "InvalidEncodedParameterLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MisMatchedInputsLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NewOwnerIsZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoHandoverRequest",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnsafeCast",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipHandoverCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipHandoverRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vaultAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isMax",
          "type": "bool"
        }
      ],
      "name": "approveTokenForVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cancelOwnershipHandover",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "completeOwnershipHandover",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_packedOperations",
          "type": "bytes"
        },
        {
          "internalType": "bytes[]",
          "name": "_encodedParameters",
          "type": "bytes[]"
        }
      ],
      "name": "multiInteract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "result",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "ownershipHandoverExpiresAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "result",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requestOwnershipHandover",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b5061001a3361001f565b61005b565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b61146e8061006a6000396000f3fe6080604052600436106100865760003560e01c8063715018a611610059578063715018a6146100dd5780638da5cb5b146100e5578063f04e283e14610116578063f2fde38b14610129578063fee81cf41461013c57600080fd5b8063256929621461008b5780632b492640146100955780633f7d7bc9146100b557806354d1f13d146100d5575b600080fd5b61009361017d565b005b3480156100a157600080fd5b506100936100b0366004610e5e565b6101cd565b3480156100c157600080fd5b506100936100d0366004610f38565b610c36565b610093610c5c565b610093610c98565b3480156100f157600080fd5b50638b78c6d819546040516001600160a01b0390911681526020015b60405180910390f35b610093610124366004610f88565b610cac565b610093610137366004610f88565b610cec565b34801561014857600080fd5b5061016f610157366004610f88565b63389a75e1600c908152600091909152602090205490565b60405190815260200161010d565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b8281146101ed57604051633a89615b60e01b815260040160405180910390fd5b6000805b82811015610c2e5785858281811061020b5761020b610fac565b919091013560f81c92506000905082600981111561022b5761022b610fc2565b600981111561023c5761023c610fc2565b14610c2e5760058260ff16600981111561025857610258610fc2565b600981111561026957610269610fc2565b036103975761029d84848381811061028357610283610fac565b90506020028101906102959190610fd8565b610120610d13565b60008060008060008888878181106102b7576102b7610fac565b90506020028101906102c99190610fd8565b8101906102d691906110c9565b6040805160a0810182526001600160a01b03871660608201908152608082018790528152602080820186905281830185905282518084018452308152908101879052915163187945bd60e11b8152969b5094995092975090955093506e22d473030f116ddee9f6b43ac78ba3926330f28b7a9261035b9290913390879060040161117c565b600060405180830381600087803b15801561037557600080fd5b505af1158015610389573d6000803e3d6000fd5b505050505050505050610c26565b60068260ff1660098111156103ae576103ae610fc2565b60098111156103bf576103bf610fc2565b03610546576103f38484838181106103d9576103d9610fac565b90506020028101906103eb9190610fd8565b610140610d13565b60008060008060008089898881811061040e5761040e610fac565b90506020028101906104209190610fd8565b81019061042d9190611200565b9550955095509550955095506e22d473030f116ddee9f6b43ac78ba36001600160a01b0316632b67b57033604051806060016040528060405180608001604052808c6001600160a01b031681526020016104908c6001600160a01b038016610d41565b6001600160a01b031681526020016104ae8b65ffffffffffff610d41565b65ffffffffffff1681526020016104cd8a65ffffffffffff8016610d41565b65ffffffffffff16905281523060208201526040908101879052516001600160e01b031960e085901b1681526105099291908690600401611275565b600060405180830381600087803b15801561052357600080fd5b505af1158015610537573d6000803e3d6000fd5b50505050505050505050610c26565b60078260ff16600981111561055d5761055d610fc2565b600981111561056e5761056e610fc2565b03610679576105a184848381811061058857610588610fac565b905060200281019061059a9190610fd8565b6040610d13565b6000808585848181106105b6576105b6610fac565b90506020028101906105c89190610fd8565b8101906105d591906112f3565b90925090506e22d473030f116ddee9f6b43ac78ba36336c785163330610602856001600160a01b03610d41565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529183166024830152821660448201529085166064820152608401600060405180830381600087803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505050505050610c26565b60018260ff16600981111561069057610690610fc2565b60098111156106a1576106a1610fc2565b03610784576106d48484838181106106bb576106bb610fac565b90506020028101906106cd9190610fd8565b6060610d13565b60008060008686858181106106eb576106eb610fac565b90506020028101906106fd9190610fd8565b81019061070a919061131f565b60405163f970c3b760e01b81526001600160a01b0380841660048301523360248301526044820183905293965091945092509084169063f970c3b7906064015b600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b50505050505050610c26565b60028260ff16600981111561079b5761079b610fc2565b60098111156107ac576107ac610fc2565b0361089c576107df8484838181106107c6576107c6610fac565b90506020028101906107d89190610fd8565b6080610d13565b6000806000808787868181106107f7576107f7610fac565b90506020028101906108099190610fd8565b8101906108169190611360565b604051635820ba6360e01b81526001600160a01b038085166004830152336024830152808416604483015260648201839052949850929650909450925090851690635820ba63906084015b600060405180830381600087803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b5050505050505050610c26565b60038260ff1660098111156108b3576108b3610fc2565b60098111156108c4576108c4610fc2565b03610964576108de8484838181106107c6576107c6610fac565b6000806000808787868181106108f6576108f6610fac565b90506020028101906109089190610fd8565b8101906109159190611360565b6040516349a66ca360e01b81526001600160a01b0380851660048301523360248301528084166044830152606482018390529498509296509094509250908516906349a66ca390608401610861565b60048260ff16600981111561097b5761097b610fc2565b600981111561098c5761098c610fc2565b03610a20576109a68484838181106106bb576106bb610fac565b60008060008686858181106109bd576109bd610fac565b90506020028101906109cf9190610fd8565b8101906109dc919061131f565b604051634fa7391960e01b81526001600160a01b03808416600483015233602483015260448201839052939650919450925090841690634fa739199060640161074a565b60088260ff166009811115610a3757610a37610fc2565b6009811115610a4857610a48610fc2565b03610b8657610a7c848483818110610a6257610a62610fac565b9050602002810190610a749190610fd8565b610100610d13565b600080600080878786818110610a9457610a94610fac565b9050602002810190610aa69190610fd8565b810190610ab391906113b1565b935093509350935060008082806020019051810190610ad29190611414565b91509150600083604081518110610aeb57610aeb610fac565b016020015160405163d505accf60e01b8152336004820152306024820152604481018890526064810187905260f89190911c6084820181905260a4820185905260c4820184905291506001600160a01b0388169063d505accf9060e401600060405180830381600087803b158015610b6257600080fd5b505af1158015610b76573d6000803e3d6000fd5b5050505050505050505050610c26565b60098260ff166009811115610b9d57610b9d610fc2565b6009811115610bae57610bae610fc2565b03610c2657610bc884848381811061058857610588610fac565b600080858584818110610bdd57610bdd610fac565b9050602002810190610bef9190610fd8565b810190610bfc91906112f3565b91509150816001600160a01b03163b600003610c1757600080fd5b610c2382333084610d6b565b50505b6001016101f1565b505050505050565b610c3e610dbf565b610c57838383610c4f576000610dda565b600019610dda565b505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610ca0610dbf565b610caa6000610e20565b565b610cb4610dbf565b63389a75e1600c52806000526020600c208054421115610cdc57636f5e88186000526004601cfd5b60009055610ce981610e20565b50565b610cf4610dbf565b8060601b610d0a57637448fbae6000526004601cfd5b610ce981610e20565b808214610c575760405163582379b960e11b8152600481018290526024810183905260440160405180910390fd5b600082821015610d645760405163c4bd89a960e01b815260040160405180910390fd5b5090919050565b60405181606052826040528360601b602c526323b872dd60601b600c52602060006064601c6000895af13d156001600051141716610db157637939f4246000526004601cfd5b600060605260405250505050565b638b78c6d819543314610caa576382b429006000526004601cfd5b816014528060345263095ea7b360601b60005260206000604460106000875af13d156001600051141716610e1657633e3f8f736000526004601cfd5b6000603452505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60008060008060408587031215610e7457600080fd5b843567ffffffffffffffff80821115610e8c57600080fd5b818701915087601f830112610ea057600080fd5b813581811115610eaf57600080fd5b886020828501011115610ec157600080fd5b602092830196509450908601359080821115610edc57600080fd5b818701915087601f830112610ef057600080fd5b813581811115610eff57600080fd5b8860208260051b8501011115610f1457600080fd5b95989497505060200194505050565b6001600160a01b0381168114610ce957600080fd5b600080600060608486031215610f4d57600080fd5b8335610f5881610f23565b92506020840135610f6881610f23565b915060408401358015158114610f7d57600080fd5b809150509250925092565b600060208284031215610f9a57600080fd5b8135610fa581610f23565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000808335601e19843603018112610fef57600080fd5b83018035915067ffffffffffffffff82111561100a57600080fd5b60200191503681900382131561101f57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261104d57600080fd5b813567ffffffffffffffff8082111561106857611068611026565b604051601f8301601f19908116603f0116810190828211818310171561109057611090611026565b816040528381528660208588010111156110a957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156110e157600080fd5b85356110ec81610f23565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff81111561111d57600080fd5b6111298882890161103c565b9150509295509295909350565b6000815180845260005b8181101561115c57602081850181015186830182015201611140565b506000602082860101526020601f19601f83011685010191505092915050565b600061010061119f83885180516001600160a01b03168252602090810151910152565b60208701516040840152604087015160608401526111d3608084018780516001600160a01b03168252602090810151910152565b6001600160a01b03851660c084015260e083018190526111f581840185611136565b979650505050505050565b60008060008060008060c0878903121561121957600080fd5b863561122481610f23565b95506020870135945060408701359350606087013592506080870135915060a087013567ffffffffffffffff81111561125c57600080fd5b61126889828a0161103c565b9150509295509295509295565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e08401526112e981840185611136565b9695505050505050565b6000806040838503121561130657600080fd5b823561131181610f23565b946020939093013593505050565b60008060006060848603121561133457600080fd5b833561133f81610f23565b9250602084013561134f81610f23565b929592945050506040919091013590565b6000806000806080858703121561137657600080fd5b843561138181610f23565b9350602085013561139181610f23565b925060408501356113a181610f23565b9396929550929360600135925050565b600080600080608085870312156113c757600080fd5b84356113d281610f23565b93506020850135925060408501359150606085013567ffffffffffffffff8111156113fc57600080fd5b6114088782880161103c565b91505092959194509250565b6000806040838503121561142757600080fd5b50508051602090910151909290915056fea264697066735822122002d0219beb8676a13f2c86e79246f9b974b7fc22b9374067fa3536150410ae3c64736f6c63430008150033",
    "sourceMap": "464:7332:50:-:0;;;731:59;;;;;;;;;-1:-1:-1;755:28:50;772:10;755:16;:28::i;:::-;464:7332;;4883:1190:28;-1:-1:-1;;;;;5793:26:28;-1:-1:-1;;5876:29:28;;;5793:26;6031:1;5991:38;6031:1;;5980:63;4883:1190;:::o;464:7332:50:-;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106100865760003560e01c8063715018a611610059578063715018a6146100dd5780638da5cb5b146100e5578063f04e283e14610116578063f2fde38b14610129578063fee81cf41461013c57600080fd5b8063256929621461008b5780632b492640146100955780633f7d7bc9146100b557806354d1f13d146100d5575b600080fd5b61009361017d565b005b3480156100a157600080fd5b506100936100b0366004610e5e565b6101cd565b3480156100c157600080fd5b506100936100d0366004610f38565b610c36565b610093610c5c565b610093610c98565b3480156100f157600080fd5b50638b78c6d819546040516001600160a01b0390911681526020015b60405180910390f35b610093610124366004610f88565b610cac565b610093610137366004610f88565b610cec565b34801561014857600080fd5b5061016f610157366004610f88565b63389a75e1600c908152600091909152602090205490565b60405190815260200161010d565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b8281146101ed57604051633a89615b60e01b815260040160405180910390fd5b6000805b82811015610c2e5785858281811061020b5761020b610fac565b919091013560f81c92506000905082600981111561022b5761022b610fc2565b600981111561023c5761023c610fc2565b14610c2e5760058260ff16600981111561025857610258610fc2565b600981111561026957610269610fc2565b036103975761029d84848381811061028357610283610fac565b90506020028101906102959190610fd8565b610120610d13565b60008060008060008888878181106102b7576102b7610fac565b90506020028101906102c99190610fd8565b8101906102d691906110c9565b6040805160a0810182526001600160a01b03871660608201908152608082018790528152602080820186905281830185905282518084018452308152908101879052915163187945bd60e11b8152969b5094995092975090955093506e22d473030f116ddee9f6b43ac78ba3926330f28b7a9261035b9290913390879060040161117c565b600060405180830381600087803b15801561037557600080fd5b505af1158015610389573d6000803e3d6000fd5b505050505050505050610c26565b60068260ff1660098111156103ae576103ae610fc2565b60098111156103bf576103bf610fc2565b03610546576103f38484838181106103d9576103d9610fac565b90506020028101906103eb9190610fd8565b610140610d13565b60008060008060008089898881811061040e5761040e610fac565b90506020028101906104209190610fd8565b81019061042d9190611200565b9550955095509550955095506e22d473030f116ddee9f6b43ac78ba36001600160a01b0316632b67b57033604051806060016040528060405180608001604052808c6001600160a01b031681526020016104908c6001600160a01b038016610d41565b6001600160a01b031681526020016104ae8b65ffffffffffff610d41565b65ffffffffffff1681526020016104cd8a65ffffffffffff8016610d41565b65ffffffffffff16905281523060208201526040908101879052516001600160e01b031960e085901b1681526105099291908690600401611275565b600060405180830381600087803b15801561052357600080fd5b505af1158015610537573d6000803e3d6000fd5b50505050505050505050610c26565b60078260ff16600981111561055d5761055d610fc2565b600981111561056e5761056e610fc2565b03610679576105a184848381811061058857610588610fac565b905060200281019061059a9190610fd8565b6040610d13565b6000808585848181106105b6576105b6610fac565b90506020028101906105c89190610fd8565b8101906105d591906112f3565b90925090506e22d473030f116ddee9f6b43ac78ba36336c785163330610602856001600160a01b03610d41565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529183166024830152821660448201529085166064820152608401600060405180830381600087803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505050505050610c26565b60018260ff16600981111561069057610690610fc2565b60098111156106a1576106a1610fc2565b03610784576106d48484838181106106bb576106bb610fac565b90506020028101906106cd9190610fd8565b6060610d13565b60008060008686858181106106eb576106eb610fac565b90506020028101906106fd9190610fd8565b81019061070a919061131f565b60405163f970c3b760e01b81526001600160a01b0380841660048301523360248301526044820183905293965091945092509084169063f970c3b7906064015b600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b50505050505050610c26565b60028260ff16600981111561079b5761079b610fc2565b60098111156107ac576107ac610fc2565b0361089c576107df8484838181106107c6576107c6610fac565b90506020028101906107d89190610fd8565b6080610d13565b6000806000808787868181106107f7576107f7610fac565b90506020028101906108099190610fd8565b8101906108169190611360565b604051635820ba6360e01b81526001600160a01b038085166004830152336024830152808416604483015260648201839052949850929650909450925090851690635820ba63906084015b600060405180830381600087803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b5050505050505050610c26565b60038260ff1660098111156108b3576108b3610fc2565b60098111156108c4576108c4610fc2565b03610964576108de8484838181106107c6576107c6610fac565b6000806000808787868181106108f6576108f6610fac565b90506020028101906109089190610fd8565b8101906109159190611360565b6040516349a66ca360e01b81526001600160a01b0380851660048301523360248301528084166044830152606482018390529498509296509094509250908516906349a66ca390608401610861565b60048260ff16600981111561097b5761097b610fc2565b600981111561098c5761098c610fc2565b03610a20576109a68484838181106106bb576106bb610fac565b60008060008686858181106109bd576109bd610fac565b90506020028101906109cf9190610fd8565b8101906109dc919061131f565b604051634fa7391960e01b81526001600160a01b03808416600483015233602483015260448201839052939650919450925090841690634fa739199060640161074a565b60088260ff166009811115610a3757610a37610fc2565b6009811115610a4857610a48610fc2565b03610b8657610a7c848483818110610a6257610a62610fac565b9050602002810190610a749190610fd8565b610100610d13565b600080600080878786818110610a9457610a94610fac565b9050602002810190610aa69190610fd8565b810190610ab391906113b1565b935093509350935060008082806020019051810190610ad29190611414565b91509150600083604081518110610aeb57610aeb610fac565b016020015160405163d505accf60e01b8152336004820152306024820152604481018890526064810187905260f89190911c6084820181905260a4820185905260c4820184905291506001600160a01b0388169063d505accf9060e401600060405180830381600087803b158015610b6257600080fd5b505af1158015610b76573d6000803e3d6000fd5b5050505050505050505050610c26565b60098260ff166009811115610b9d57610b9d610fc2565b6009811115610bae57610bae610fc2565b03610c2657610bc884848381811061058857610588610fac565b600080858584818110610bdd57610bdd610fac565b9050602002810190610bef9190610fd8565b810190610bfc91906112f3565b91509150816001600160a01b03163b600003610c1757600080fd5b610c2382333084610d6b565b50505b6001016101f1565b505050505050565b610c3e610dbf565b610c57838383610c4f576000610dda565b600019610dda565b505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610ca0610dbf565b610caa6000610e20565b565b610cb4610dbf565b63389a75e1600c52806000526020600c208054421115610cdc57636f5e88186000526004601cfd5b60009055610ce981610e20565b50565b610cf4610dbf565b8060601b610d0a57637448fbae6000526004601cfd5b610ce981610e20565b808214610c575760405163582379b960e11b8152600481018290526024810183905260440160405180910390fd5b600082821015610d645760405163c4bd89a960e01b815260040160405180910390fd5b5090919050565b60405181606052826040528360601b602c526323b872dd60601b600c52602060006064601c6000895af13d156001600051141716610db157637939f4246000526004601cfd5b600060605260405250505050565b638b78c6d819543314610caa576382b429006000526004601cfd5b816014528060345263095ea7b360601b60005260206000604460106000875af13d156001600051141716610e1657633e3f8f736000526004601cfd5b6000603452505050565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60008060008060408587031215610e7457600080fd5b843567ffffffffffffffff80821115610e8c57600080fd5b818701915087601f830112610ea057600080fd5b813581811115610eaf57600080fd5b886020828501011115610ec157600080fd5b602092830196509450908601359080821115610edc57600080fd5b818701915087601f830112610ef057600080fd5b813581811115610eff57600080fd5b8860208260051b8501011115610f1457600080fd5b95989497505060200194505050565b6001600160a01b0381168114610ce957600080fd5b600080600060608486031215610f4d57600080fd5b8335610f5881610f23565b92506020840135610f6881610f23565b915060408401358015158114610f7d57600080fd5b809150509250925092565b600060208284031215610f9a57600080fd5b8135610fa581610f23565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000808335601e19843603018112610fef57600080fd5b83018035915067ffffffffffffffff82111561100a57600080fd5b60200191503681900382131561101f57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261104d57600080fd5b813567ffffffffffffffff8082111561106857611068611026565b604051601f8301601f19908116603f0116810190828211818310171561109057611090611026565b816040528381528660208588010111156110a957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156110e157600080fd5b85356110ec81610f23565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff81111561111d57600080fd5b6111298882890161103c565b9150509295509295909350565b6000815180845260005b8181101561115c57602081850181015186830182015201611140565b506000602082860101526020601f19601f83011685010191505092915050565b600061010061119f83885180516001600160a01b03168252602090810151910152565b60208701516040840152604087015160608401526111d3608084018780516001600160a01b03168252602090810151910152565b6001600160a01b03851660c084015260e083018190526111f581840185611136565b979650505050505050565b60008060008060008060c0878903121561121957600080fd5b863561122481610f23565b95506020870135945060408701359350606087013592506080870135915060a087013567ffffffffffffffff81111561125c57600080fd5b61126889828a0161103c565b9150509295509295509295565b600061010060018060a01b0380871684528551818151166020860152816020820151166040860152604081015165ffffffffffff80821660608801528060608401511660808801525050508060208701511660a085015250604085015160c08401528060e08401526112e981840185611136565b9695505050505050565b6000806040838503121561130657600080fd5b823561131181610f23565b946020939093013593505050565b60008060006060848603121561133457600080fd5b833561133f81610f23565b9250602084013561134f81610f23565b929592945050506040919091013590565b6000806000806080858703121561137657600080fd5b843561138181610f23565b9350602085013561139181610f23565b925060408501356113a181610f23565b9396929550929360600135925050565b600080600080608085870312156113c757600080fd5b84356113d281610f23565b93506020850135925060408501359150606085013567ffffffffffffffff8111156113fc57600080fd5b6114088782880161103c565b91505092959194509250565b6000806040838503121561142757600080fd5b50508051602090910151909290915056fea264697066735822122002d0219beb8676a13f2c86e79246f9b974b7fc22b9374067fa3536150410ae3c64736f6c63430008150033",
    "sourceMap": "464:7332:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9021:617:28;;;:::i;:::-;;1167:5973:50;;;;;;;;;;-1:-1:-1;1167:5973:50;;;;;:::i;:::-;;:::i;7146:198::-;;;;;;;;;;-1:-1:-1;7146:198:50;;;;;:::i;:::-;;:::i;9720:456:28:-;;;:::i;8762:100::-;;;:::i;11408:182::-;;;;;;;;;;-1:-1:-1;;;11556:18:28;11408:182;;-1:-1:-1;;;;;1973:32:53;;;1955:51;;1943:2;1928:18;11408:182:28;;;;;;;;10363:708;;;;;;:::i;:::-;;:::i;8348:349::-;;;;;;:::i;:::-;;:::i;11693:435::-;;;;;;;;;;-1:-1:-1;11693:435:28;;;;;:::i;:::-;11963:19;11957:4;11950:33;;;11812:14;11996:26;;;;12106:4;12090:21;;12084:28;;11693:435;;;;2415:25:53;;;2403:2;2388:18;11693:435:28;2269:177:53;9021:617:28;9114:15;7972:9;9132:46;;:15;:46;9114:64;;9346:19;9340:4;9333:33;9396:8;9390:4;9383:22;9452:7;9445:4;9439;9429:21;9422:38;9599:8;9552:45;9549:1;9546;9541:67;9248:374;9021:617::o;1167:5973:50:-;1308:53;;;1304:90;;1370:24;;-1:-1:-1;;;1370:24:50;;;;;;;;;;;1304:90;1408:16;1443:9;1438:5686;1454:29;;;1438:5686;;;1527:17;;1545:1;1527:20;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1596:18:50;;-1:-1:-1;1527:20:50;1570:22;;;;;;;;:::i;:::-;:44;;;;;;;;:::i;:::-;1566:5544;1638:5;1566:5544;1698:37;1683:10;1672:22;;;;;;;;;;:::i;:::-;:63;;;;;;;;:::i;:::-;;1668:5442;;1759:54;1786:18;;1805:1;1786:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1809:3;1759:26;:54::i;:::-;1836:14;1852:15;1869:14;1885:17;1904:23;1966:18;;1985:1;1966:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1955:78;;;;;;;:::i;:::-;2107:267;;;2186:69;;;;;-1:-1:-1;;;;;2186:69:50;;2107:267;;;2186:69;;;;;;;;;2107:267;;2186:69;2107:267;;;;;;;;;;;;2400:90;;;;;;;2457:4;2400:90;;;;;;;;2055:529;;-1:-1:-1;;;2055:529:50;;1835:198;;-1:-1:-1;1835:198:50;;-1:-1:-1;1835:198:50;;-1:-1:-1;1835:198:50;;-1:-1:-1;1835:198:50;-1:-1:-1;539:42:50;;2055:26;;:529;;2107:267;;2516:10;;1835:198;;2055:529;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1737:866;;;;;1668:5442;;;2639:25;2624:10;2613:22;;;;;;;;;;:::i;:::-;:51;;;;;;;;:::i;:::-;;2609:4501;;2688:54;2715:18;;2734:1;2715:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2738:3;2688:26;:54::i;:::-;2790:14;2830:15;2871:19;2916:14;2956:17;2999:23;3058:18;;3077:1;3058:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;3047:87;;;;;;;:::i;:::-;2764:370;;;;;;;;;;;;539:42;-1:-1:-1;;;;;3156:14:50;;3196:10;3232:603;;;;;;;;3303:401;;;;;;;;3377:6;-1:-1:-1;;;;;3303:401:50;;;;;3433:45;3451:7;-1:-1:-1;;;;;3433:45:50;;:17;:45::i;:::-;-1:-1:-1;;;;;3303:401:50;;;;;3532:48;3550:11;3563:16;3532:17;:48::i;:::-;3303:401;;;;;;3629:43;3647:6;3655:16;3629:43;;:17;:43::i;:::-;3303:401;;;;3232:603;;3751:4;3232:603;;;;;;;;;;;3156:737;-1:-1:-1;;;;;;3156:737:50;;;;;;;;;;;3861:10;;3156:737;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2666:1246;;;;;;2609:4501;;;3948:31;3933:10;3922:22;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;;3918:3192;;4003:53;4030:18;;4049:1;4030:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4053:2;4003:26;:53::i;:::-;4079:14;4095:15;4125:18;;4144:1;4125:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4114:53;;;;;;;:::i;:::-;4078:89;;-1:-1:-1;4078:89:50;-1:-1:-1;539:42:50;4189:20;4235:10;4255:4;4270:45;4078:89;-1:-1:-1;;;;;4270:17:50;:45::i;:::-;4189:157;;-1:-1:-1;;;;;;4189:157:50;;;;;;;-1:-1:-1;;;;;8514:15:53;;;4189:157:50;;;8496:34:53;8566:15;;;8546:18;;;8539:43;8618:15;;8598:18;;;8591:43;8670:15;;;8650:18;;;8643:43;8430:19;;4189:157:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3981:384;;3918:3192;;;4401:28;4386:10;4375:22;;;;;;;;;;:::i;:::-;:54;;;;;;;;:::i;:::-;;4371:2739;;4453:53;4480:18;;4499:1;4480:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4503:2;4453:26;:53::i;:::-;4529:20;4551:22;4575:15;4629:18;;4648:1;4629:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4618:58;;;;;;;:::i;:::-;4698:71;;-1:-1:-1;;;4698:71:50;;-1:-1:-1;;;;;9471:15:53;;;4698:71:50;;;9453:34:53;4749:10:50;9503:18:53;;;9496:43;9555:18;;;9548:34;;;4528:148:50;;-1:-1:-1;4528:148:50;;-1:-1:-1;4528:148:50;-1:-1:-1;4698:32:50;;;;;;9388:18:53;;4698:71:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4431:357;;;4371:2739;;;4824:29;4809:10;4798:22;;;;;;;;;;:::i;:::-;:55;;;;;;;;:::i;:::-;;4794:2316;;4877:54;4904:18;;4923:1;4904:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4927:3;4877:26;:54::i;:::-;4954:20;4976:22;5000:11;5013:15;5067:18;;5086:1;5067:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5056:67;;;;;;;:::i;:::-;5145:77;;-1:-1:-1;;;5145:77:50;;-1:-1:-1;;;;;10546:15:53;;;5145:77:50;;;10528:34:53;5197:10:50;10578:18:53;;;10571:43;10650:15;;;10630:18;;;10623:43;10682:18;;;10675:34;;;4953:170:50;;-1:-1:-1;4953:170:50;;-1:-1:-1;4953:170:50;;-1:-1:-1;4953:170:50;-1:-1:-1;5145:33:50;;;;;;10462:19:53;;5145:77:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4855:386;;;;4794:2316;;;5277:23;5262:10;5251:22;;;;;;;;;;:::i;:::-;:49;;;;;;;;:::i;:::-;;5247:1863;;5324:54;5351:18;;5370:1;5351:21;;;;;;;:::i;5324:54::-;5401:20;5423:22;5447:11;5460:15;5514:18;;5533:1;5514:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5503:67;;;;;;;:::i;:::-;5592:71;;-1:-1:-1;;;5592:71:50;;-1:-1:-1;;;;;10546:15:53;;;5592:71:50;;;10528:34:53;5638:10:50;10578:18:53;;;10571:43;10650:15;;;10630:18;;;10623:43;10682:18;;;10675:34;;;5400:170:50;;-1:-1:-1;5400:170:50;;-1:-1:-1;5400:170:50;;-1:-1:-1;5400:170:50;-1:-1:-1;5592:27:50;;;;;;10462:19:53;;5592:71:50;10239:476:53;5247:1863:50;5718:23;5703:10;5692:22;;;;;;;;;;:::i;:::-;:49;;;;;;;;:::i;:::-;;5688:1422;;5765:53;5792:18;;5811:1;5792:21;;;;;;;:::i;5765:53::-;5841:20;5863:22;5887:15;5941:18;;5960:1;5941:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;5930:58;;;;;;;:::i;:::-;6010:66;;-1:-1:-1;;;6010:66:50;;-1:-1:-1;;;;;9471:15:53;;;6010:66:50;;;9453:34:53;6056:10:50;9503:18:53;;;9496:43;9555:18;;;9548:34;;;5840:148:50;;-1:-1:-1;5840:148:50;;-1:-1:-1;5840:148:50;-1:-1:-1;6010:27:50;;;;;;9388:18:53;;6010:66:50;9193:395:53;5688:1422:50;6131:23;6116:10;6105:22;;;;;;;;;;:::i;:::-;:49;;;;;;;;:::i;:::-;;6101:1009;;6178:54;6205:18;;6224:1;6205:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6228:3;6178:26;:54::i;:::-;6255:12;6269:15;6286:17;6305:23;6367:18;;6386:1;6367:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6356:67;;;;;;;:::i;:::-;6254:169;;;;;;;;6446:10;6458;6483;6472:42;;;;;;;;;;;;:::i;:::-;6445:69;;;;6536:8;6553:10;6564:2;6553:14;;;;;;;;:::i;:::-;;;;;6590:72;;-1:-1:-1;;;6590:72:50;;6604:10;6590:72;;;11936:34:53;6624:4:50;11986:18:53;;;11979:43;12038:18;;;12031:34;;;12081:18;;;12074:34;;;6553:14:50;;;;;12124:19:53;;;12117:46;;;12179:19;;;12172:35;;;12223:19;;;12216:35;;;6553:14:50;-1:-1:-1;;;;;;6590:13:50;;;;;11870:19:53;;6590:72:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6156:525;;;;;;;6101:1009;;;6717:29;6702:10;6691:22;;;;;;;;;;:::i;:::-;:55;;;;;;;;:::i;:::-;;6687:423;;6770:53;6797:18;;6816:1;6797:21;;;;;;;:::i;6770:53::-;6846:14;6862:15;6892:18;;6911:1;6892:21;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6881:53;;;;;;;:::i;:::-;6845:89;;;;6960:6;-1:-1:-1;;;;;6960:18:50;;6982:1;6960:23;6956:37;;6985:8;;;6956:37;7015:76;7048:6;7056:10;7076:4;7083:7;7015:32;:76::i;:::-;6748:362;;6687:423;1485:3;;1438:5686;;;;1280:5854;1167:5973;;;;:::o;7146:198::-;12517:13:28;:11;:13::i;:::-;7256:81:50::1;7284:6;7292:13;7307:5;:29;;7335:1;7256:27;:81::i;7307:29::-;-1:-1:-1::0;;7256:27:50::1;:81::i;:::-;7146:198:::0;;;:::o;9720:456:28:-;9922:19;9916:4;9909:33;9968:8;9962:4;9955:22;10020:1;10013:4;10007;9997:21;9990:32;10151:8;10105:44;10102:1;10099;10094:66;9720:456::o;8762:100::-;12517:13;:11;:13::i;:::-;8834:21:::1;8852:1;8834:9;:21::i;:::-;8762:100::o:0;10363:708::-;12517:13;:11;:13::i;:::-;10597:19:::1;10591:4;10584:33;10643:12;10637:4;10630:26;10705:4;10699;10689:21;10811:12;10805:19;10792:11;10789:36;10786:157;;;10857:10;10851:4;10844:24;10924:4;10918;10911:18;10786:157;11020:1;10999:23:::0;;11041::::1;11051:12:::0;11041:9:::1;:23::i;:::-;10363:708:::0;:::o;8348:349::-;12517:13;:11;:13::i;:::-;8520:8:::1;8516:2;8512:17;8502:150;;8562:10;8556:4;8549:24;8633:4;8627;8620:18;8502:150;8671:19;8681:8;8671:9;:19::i;7350:277:50:-:0;7472:43;;;7468:153;;7538:72;;-1:-1:-1;;;7538:72:50;;;;;12436:25:53;;;12477:18;;;12470:34;;;12409:18;;7538:72:50;;;;;;;7633:161;7711:7;7743:3;7734:6;:12;7730:37;;;7755:12;;-1:-1:-1;;;7755:12:50;;;;;;;;;;;7730:37;-1:-1:-1;7784:3:50;;7633:161;-1:-1:-1;7633:161:50:o;8181:1139:30:-;8364:4;8358:11;8429:6;8423:4;8416:20;8494:2;8488:4;8481:16;8559:4;8555:2;8551:13;8545:4;8538:27;-1:-1:-1;;;8615:4:30;8608:48;9022:4;9016;9010;9004;9001:1;8994:5;8987;8982:45;8916:16;8909:24;8905:1;8898:4;8892:11;8889:18;8886:48;8801:244;8774:404;;9091:10;9085:4;9078:24;9159:4;9153;9146:18;8774:404;9204:1;9198:4;9191:15;9260:4;9253:15;-1:-1:-1;;;;8181:1139:30:o;7292:355:28:-;-1:-1:-1;;7498:18:28;7488:8;7485:32;7475:156;;7550:10;7544:4;7537:24;7612:4;7606;7599:18;14171:936:30;14333:2;14327:4;14320:16;14390:6;14384:4;14377:20;-1:-1:-1;;;14449:4:30;14442:48;14843:4;14837;14831;14825;14822:1;14815:5;14808;14803:45;14737:16;14730:24;14726:1;14719:4;14713:11;14710:18;14707:48;14622:244;14595:399;;14912:10;14906:4;14899:24;14975:4;14969;14962:18;14595:399;15020:1;15014:4;15007:15;14171:936;;;:::o;6145:1089:28:-;-1:-1:-1;;7093:16:28;;-1:-1:-1;;;;;6941:26:28;;;;;;7053:38;7050:1;;7042:78;7177:27;6145:1089::o;14:1092:53:-;131:6;139;147;155;208:2;196:9;187:7;183:23;179:32;176:52;;;224:1;221;214:12;176:52;264:9;251:23;293:18;334:2;326:6;323:14;320:34;;;350:1;347;340:12;320:34;388:6;377:9;373:22;363:32;;433:7;426:4;422:2;418:13;414:27;404:55;;455:1;452;445:12;404:55;495:2;482:16;521:2;513:6;510:14;507:34;;;537:1;534;527:12;507:34;584:7;577:4;568:6;564:2;560:15;556:26;553:39;550:59;;;605:1;602;595:12;550:59;636:4;628:13;;;;-1:-1:-1;660:6:53;-1:-1:-1;704:20:53;;;691:34;;737:16;;;734:36;;;766:1;763;756:12;734:36;804:8;793:9;789:24;779:34;;851:7;844:4;840:2;836:13;832:27;822:55;;873:1;870;863:12;822:55;915:2;902:16;943:2;933:8;930:16;927:36;;;959:1;956;949:12;927:36;1016:7;1009:4;997:8;994:1;990:16;986:2;982:25;978:36;975:49;972:69;;;1037:1;1034;1027:12;972:69;14:1092;;;;-1:-1:-1;;1068:4:53;1060:13;;-1:-1:-1;;;14:1092:53:o;1111:131::-;-1:-1:-1;;;;;1186:31:53;;1176:42;;1166:70;;1232:1;1229;1222:12;1247:557;1321:6;1329;1337;1390:2;1378:9;1369:7;1365:23;1361:32;1358:52;;;1406:1;1403;1396:12;1358:52;1445:9;1432:23;1464:31;1489:5;1464:31;:::i;:::-;1514:5;-1:-1:-1;1571:2:53;1556:18;;1543:32;1584:33;1543:32;1584:33;:::i;:::-;1636:7;-1:-1:-1;1695:2:53;1680:18;;1667:32;1737:15;;1730:23;1718:36;;1708:64;;1768:1;1765;1758:12;1708:64;1791:7;1781:17;;;1247:557;;;;;:::o;2017:247::-;2076:6;2129:2;2117:9;2108:7;2104:23;2100:32;2097:52;;;2145:1;2142;2135:12;2097:52;2184:9;2171:23;2203:31;2228:5;2203:31;:::i;:::-;2253:5;2017:247;-1:-1:-1;;;2017:247:53:o;2451:127::-;2512:10;2507:3;2503:20;2500:1;2493:31;2543:4;2540:1;2533:15;2567:4;2564:1;2557:15;2583:127;2644:10;2639:3;2635:20;2632:1;2625:31;2675:4;2672:1;2665:15;2699:4;2696:1;2689:15;2715:521;2792:4;2798:6;2858:11;2845:25;2952:2;2948:7;2937:8;2921:14;2917:29;2913:43;2893:18;2889:68;2879:96;;2971:1;2968;2961:12;2879:96;2998:33;;3050:20;;;-1:-1:-1;3093:18:53;3082:30;;3079:50;;;3125:1;3122;3115:12;3079:50;3158:4;3146:17;;-1:-1:-1;3189:14:53;3185:27;;;3175:38;;3172:58;;;3226:1;3223;3216:12;3172:58;2715:521;;;;;:::o;3241:127::-;3302:10;3297:3;3293:20;3290:1;3283:31;3333:4;3330:1;3323:15;3357:4;3354:1;3347:15;3373:718;3415:5;3468:3;3461:4;3453:6;3449:17;3445:27;3435:55;;3486:1;3483;3476:12;3435:55;3522:6;3509:20;3548:18;3585:2;3581;3578:10;3575:36;;;3591:18;;:::i;:::-;3666:2;3660:9;3634:2;3720:13;;-1:-1:-1;;3716:22:53;;;3740:2;3712:31;3708:40;3696:53;;;3764:18;;;3784:22;;;3761:46;3758:72;;;3810:18;;:::i;:::-;3850:10;3846:2;3839:22;3885:2;3877:6;3870:18;3931:3;3924:4;3919:2;3911:6;3907:15;3903:26;3900:35;3897:55;;;3948:1;3945;3938:12;3897:55;4012:2;4005:4;3997:6;3993:17;3986:4;3978:6;3974:17;3961:54;4059:1;4052:4;4047:2;4039:6;4035:15;4031:26;4024:37;4079:6;4070:15;;;;;;3373:718;;;;:::o;4096:669::-;4208:6;4216;4224;4232;4240;4293:3;4281:9;4272:7;4268:23;4264:33;4261:53;;;4310:1;4307;4300:12;4261:53;4349:9;4336:23;4368:31;4393:5;4368:31;:::i;:::-;4418:5;-1:-1:-1;4470:2:53;4455:18;;4442:32;;-1:-1:-1;4521:2:53;4506:18;;4493:32;;-1:-1:-1;4572:2:53;4557:18;;4544:32;;-1:-1:-1;4627:3:53;4612:19;;4599:33;4655:18;4644:30;;4641:50;;;4687:1;4684;4677:12;4641:50;4710:49;4751:7;4742:6;4731:9;4727:22;4710:49;:::i;:::-;4700:59;;;4096:669;;;;;;;;:::o;4958:422::-;4999:3;5037:5;5031:12;5064:6;5059:3;5052:19;5089:1;5099:162;5113:6;5110:1;5107:13;5099:162;;;5175:4;5231:13;;;5227:22;;5221:29;5203:11;;;5199:20;;5192:59;5128:12;5099:162;;;5103:3;5306:1;5299:4;5290:6;5285:3;5281:16;5277:27;5270:38;5369:4;5362:2;5358:7;5353:2;5345:6;5341:15;5337:29;5332:3;5328:39;5324:50;5317:57;;;4958:422;;;;:::o;5385:830::-;5739:4;5768:3;5780:60;5830:9;5821:6;5815:13;4856:12;;-1:-1:-1;;;;;4852:38:53;4840:51;;4940:4;4929:16;;;4923:23;4907:14;;4900:47;4770:183;5780:60;5896:4;5888:6;5884:17;5878:24;5871:4;5860:9;5856:20;5849:54;5959:4;5951:6;5947:17;5941:24;5934:4;5923:9;5919:20;5912:54;5975:63;6033:3;6022:9;6018:19;6010:6;4856:12;;-1:-1:-1;;;;;4852:38:53;4840:51;;4940:4;4929:16;;;4923:23;4907:14;;4900:47;4770:183;5975:63;-1:-1:-1;;;;;6075:32:53;;6069:3;6054:19;;6047:61;6139:3;6124:19;;6117:31;;;6165:44;6190:18;;;6182:6;6165:44;:::i;:::-;6157:52;5385:830;-1:-1:-1;;;;;;;5385:830:53:o;6220:738::-;6341:6;6349;6357;6365;6373;6381;6434:3;6422:9;6413:7;6409:23;6405:33;6402:53;;;6451:1;6448;6441:12;6402:53;6490:9;6477:23;6509:31;6534:5;6509:31;:::i;:::-;6559:5;-1:-1:-1;6611:2:53;6596:18;;6583:32;;-1:-1:-1;6662:2:53;6647:18;;6634:32;;-1:-1:-1;6713:2:53;6698:18;;6685:32;;-1:-1:-1;6764:3:53;6749:19;;6736:33;;-1:-1:-1;6820:3:53;6805:19;;6792:33;6848:18;6837:30;;6834:50;;;6880:1;6877;6870:12;6834:50;6903:49;6944:7;6935:6;6924:9;6920:22;6903:49;:::i;:::-;6893:59;;;6220:738;;;;;;;;:::o;6963:931::-;7191:4;7220:3;7259:1;7255;7250:3;7246:11;7242:19;7300:2;7292:6;7288:15;7277:9;7270:34;7329:6;7323:13;7387:2;7382;7376:9;7372:18;7367:2;7356:9;7352:18;7345:46;7451:2;7445;7441;7437:11;7431:18;7427:27;7422:2;7411:9;7407:18;7400:55;7498:2;7494;7490:11;7484:18;7521:14;7589:2;7575:12;7571:21;7566:2;7555:9;7551:18;7544:49;7654:2;7648;7644;7640:11;7634:18;7630:27;7624:3;7613:9;7609:19;7602:56;;;;7723:2;7717;7709:6;7705:15;7699:22;7695:31;7689:3;7678:9;7674:19;7667:60;;7782:2;7774:6;7770:15;7764:22;7758:3;7747:9;7743:19;7736:51;7824:2;7818:3;7807:9;7803:19;7796:31;7844:44;7884:2;7873:9;7869:18;7861:6;7844:44;:::i;:::-;7836:52;6963:931;-1:-1:-1;;;;;;6963:931:53:o;7899:323::-;7975:6;7983;8036:2;8024:9;8015:7;8011:23;8007:32;8004:52;;;8052:1;8049;8042:12;8004:52;8091:9;8078:23;8110:31;8135:5;8110:31;:::i;:::-;8160:5;8212:2;8197:18;;;;8184:32;;-1:-1:-1;;;7899:323:53:o;8697:491::-;8809:6;8817;8825;8878:2;8866:9;8857:7;8853:23;8849:32;8846:52;;;8894:1;8891;8884:12;8846:52;8933:9;8920:23;8952:31;8977:5;8952:31;:::i;:::-;9002:5;-1:-1:-1;9059:2:53;9044:18;;9031:32;9072:33;9031:32;9072:33;:::i;:::-;8697:491;;9124:7;;-1:-1:-1;;;9178:2:53;9163:18;;;;9150:32;;8697:491::o;9593:641::-;9722:6;9730;9738;9746;9799:3;9787:9;9778:7;9774:23;9770:33;9767:53;;;9816:1;9813;9806:12;9767:53;9855:9;9842:23;9874:31;9899:5;9874:31;:::i;:::-;9924:5;-1:-1:-1;9981:2:53;9966:18;;9953:32;9994:33;9953:32;9994:33;:::i;:::-;10046:7;-1:-1:-1;10105:2:53;10090:18;;10077:32;10118:33;10077:32;10118:33;:::i;:::-;9593:641;;;;-1:-1:-1;10170:7:53;;10224:2;10209:18;10196:32;;-1:-1:-1;;9593:641:53:o;10720:612::-;10835:6;10843;10851;10859;10912:3;10900:9;10891:7;10887:23;10883:33;10880:53;;;10929:1;10926;10919:12;10880:53;10968:9;10955:23;10987:31;11012:5;10987:31;:::i;:::-;11037:5;-1:-1:-1;11089:2:53;11074:18;;11061:32;;-1:-1:-1;11140:2:53;11125:18;;11112:32;;-1:-1:-1;11195:2:53;11180:18;;11167:32;11222:18;11211:30;;11208:50;;;11254:1;11251;11244:12;11208:50;11277:49;11318:7;11309:6;11298:9;11294:22;11277:49;:::i;:::-;11267:59;;;10720:612;;;;;;;:::o;11337:245::-;11416:6;11424;11477:2;11465:9;11456:7;11452:23;11448:32;11445:52;;;11493:1;11490;11483:12;11445:52;-1:-1:-1;;11516:16:53;;11572:2;11557:18;;;11551:25;11516:16;;11551:25;;-1:-1:-1;11337:245:53:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "approveTokenForVault(address,address,bool)": "3f7d7bc9",
    "cancelOwnershipHandover()": "54d1f13d",
    "completeOwnershipHandover(address)": "f04e283e",
    "multiInteract(bytes,bytes[])": "2b492640",
    "owner()": "8da5cb5b",
    "ownershipHandoverExpiresAt(address)": "fee81cf4",
    "renounceOwnership()": "715018a6",
    "requestOwnershipHandover()": "25692962",
    "transferOwnership(address)": "f2fde38b"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidEncodedParameterLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchedInputsLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewOwnerIsZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoHandoverRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsafeCast\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipHandoverRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vaultAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isMax\",\"type\":\"bool\"}],\"name\":\"approveTokenForVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"completeOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packedOperations\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedParameters\",\"type\":\"bytes[]\"}],\"name\":\"multiInteract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"ownershipHandoverExpiresAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestOwnershipHandover\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"details\":\"Cannot double-initialize.\"}],\"NewOwnerIsZeroAddress()\":[{\"details\":\"The `newOwner` cannot be the zero address.\"}],\"NoHandoverRequest()\":[{\"details\":\"The `pendingOwner` does not have a valid handover request.\"}],\"Unauthorized()\":[{\"details\":\"The caller is not authorized to call the function.\"}]},\"events\":{\"OwnershipHandoverCanceled(address)\":{\"details\":\"The ownership handover to `pendingOwner` has been canceled.\"},\"OwnershipHandoverRequested(address)\":{\"details\":\"An ownership handover to `pendingOwner` has been requested.\"},\"OwnershipTransferred(address,address)\":{\"details\":\"The ownership is transferred from `oldOwner` to `newOwner`. This event is intentionally kept the same as OpenZeppelin's Ownable to be compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), despite it not being as lightweight as a single argument event.\"}},\"kind\":\"dev\",\"methods\":{\"cancelOwnershipHandover()\":{\"details\":\"Cancels the two-step ownership handover to the caller, if any.\"},\"completeOwnershipHandover(address)\":{\"details\":\"Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.\"},\"owner()\":{\"details\":\"Returns the owner of the contract.\"},\"ownershipHandoverExpiresAt(address)\":{\"details\":\"Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.\"},\"renounceOwnership()\":{\"details\":\"Allows the owner to renounce their ownership.\"},\"requestOwnershipHandover()\":{\"details\":\"Request a two-step ownership handover to the caller. The request will automatically expire in 48 hours (172800 seconds) by default.\"},\"transferOwnership(address)\":{\"details\":\"Allows the owner to transfer the ownership to `newOwner`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/vaultRouter.sol\":\"VaultRouter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin-contracts/=lib/protocol-core/lib/oracle-module/lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts/=lib/protocol-core/lib/openzeppelin-contracts/contracts/\",\":descent-collective/oracle-module/=lib/protocol-core/lib/oracle-module/src/\",\":descent-collective/protocol-core/=lib/protocol-core/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/protocol-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/protocol-core/lib/openzeppelin-contracts/\",\":oracle-module/=lib/protocol-core/lib/oracle-module/\",\":permit2/=lib/permit2/src/\",\":protocol-core/=lib/protocol-core/\",\":solady/=lib/protocol-core/lib/solady/src/\",\":solmate/=lib/permit2/lib/solmate/\"]},\"sources\":{\"lib/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"lib/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"lib/permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"lib/permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]},\"lib/protocol-core/lib/solady/src/auth/Ownable.sol\":{\"keccak256\":\"0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3\",\"dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs\"]},\"lib/protocol-core/lib/solady/src/tokens/ERC20.sol\":{\"keccak256\":\"0xb4a3f9ba8a05107f7370de42cff57f3ad26dafd438712c11531a5892de2f59e0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f0a9ca06e3cf6dea1f9a4c5599581573b7d81cd64dc3afb582f325ccf5fdd6dc\",\"dweb:/ipfs/Qmb9r5dDceNF4W8S5u6i85RsNTgE5XG9HbTXkyS25ad3C6\"]},\"lib/protocol-core/lib/solady/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a\",\"dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg\"]},\"lib/protocol-core/src/currency.sol\":{\"keccak256\":\"0xc266e97010a71e6ac755dce3e51a5a5844663b355e20ab40bf2020fd9308369b\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d2660220b8a14c6d06351765dd7accec03e350e7fa9ae960c1505bea1e5d8d2d\",\"dweb:/ipfs/QmdYdPSnQC2nym38Fca4vRLKU4A78AQkgYasdg3TaRLGNY\"]},\"lib/protocol-core/src/helpers/pausable.sol\":{\"keccak256\":\"0x8acce52dcd450c73da0f77d9539962826da23aca05aa7d0c7568614e89aed997\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://35e2f674e01c0d6107f31d1c32bb2780d442420b7d26636f560a4eb1007f4a8b\",\"dweb:/ipfs/QmWwVLUGiJq6Q3fK6Zhx4pc6kaqC73pkZ1ntfVA3QCHTpd\"]},\"lib/protocol-core/src/interfaces/ICurrency.sol\":{\"keccak256\":\"0x3b7adace3df08c34906612358d435ffff3b90b5eec0eae34b6335cc8dcd0e7ed\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://370c80ec5636bd95342256d4116f703e633e6b0467ee530397e9b5cada37f998\",\"dweb:/ipfs/QmPQ5KY37JpfuSAXpJ16kBXAQVJcE253cfjYGcBEcMLERz\"]},\"lib/protocol-core/src/interfaces/IRate.sol\":{\"keccak256\":\"0x166dc423b74b60302197a27fb64557ee8ef6bafe416deb08fe7ecf94f0ede1d1\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://123ef521857e33b10b6f92b743831b26dd5100e57271353bf5c1882fc41c6a2e\",\"dweb:/ipfs/QmdK5y8SntLHAVoNRq6isddmNYunrpv1JxAxyEgRiHdAAj\"]},\"lib/protocol-core/src/interfaces/IVault.sol\":{\"keccak256\":\"0x5684f59679e090ebe583d31fda6d8882469436e71670a4873151793675c7c6c4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b265c21b1ff01a8c5cf9b1120feb6b5419a96a0e2a6d1ff4bdd89934c7869c9c\",\"dweb:/ipfs/QmdbCgiYE763cAHZ6nevhf7EzF8BzEkfwsbw4qWuxBkm8f\"]},\"lib/protocol-core/src/mocks/ERC20Token.sol\":{\"keccak256\":\"0x62b878fb4dde1f455866e0c1290cc50714805d02c2848a4a9bb33c5dfbc8464d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7af3f5638d366abfbca3186813449259a33ed43e7c13ec983d389d73df1ad204\",\"dweb:/ipfs/QmeMdoEVTGqdcgSicTTcmycSQjToT7Sn5ZTgZdVFH9E6HA\"]},\"lib/protocol-core/src/vault.sol\":{\"keccak256\":\"0xfed823950fe0e1c09191b596b689d5c2942de66ec13cba4ad5a799cecee2f140\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://a044bd7f626b4835fe13962c0873ddab89030b362049fdd00050cc9c072371b5\",\"dweb:/ipfs/QmTiH4NcKNXYfPd4AipFWVkjveJFcJCQtjsGWsxobs4fW1\"]},\"src/vaultRouter.sol\":{\"keccak256\":\"0x1bc0cd476a75b0743449179be45058e351abfd82fed032134d7a9464a23674ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04c7f777f6f8200baaaa6bec6b4ddea803058afeaecc880a3bb8eb928d69ed51\",\"dweb:/ipfs/QmTyyesneXtrXnETLNBCNWGYGL1myRnS4g8ESKStbr9HQ4\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.21+commit.d9974bed"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AlreadyInitialized"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "expectedLength",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "length",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "InvalidEncodedParameterLength"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "MisMatchedInputsLength"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "NewOwnerIsZeroAddress"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "NoHandoverRequest"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "Unauthorized"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "UnsafeCast"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "pendingOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipHandoverCanceled",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "pendingOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipHandoverRequested",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "oldOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_vaultAddress",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isMax",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveTokenForVault"
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "function",
          "name": "cancelOwnershipHandover"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "pendingOwner",
              "type": "address"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "completeOwnershipHandover"
        },
        {
          "inputs": [
            {
              "internalType": "bytes",
              "name": "_packedOperations",
              "type": "bytes"
            },
            {
              "internalType": "bytes[]",
              "name": "_encodedParameters",
              "type": "bytes[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "multiInteract"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "result",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "pendingOwner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "ownershipHandoverExpiresAt",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "result",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "function",
          "name": "requestOwnershipHandover"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "transferOwnership"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "cancelOwnershipHandover()": {
            "details": "Cancels the two-step ownership handover to the caller, if any."
          },
          "completeOwnershipHandover(address)": {
            "details": "Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`."
          },
          "owner()": {
            "details": "Returns the owner of the contract."
          },
          "ownershipHandoverExpiresAt(address)": {
            "details": "Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`."
          },
          "renounceOwnership()": {
            "details": "Allows the owner to renounce their ownership."
          },
          "requestOwnershipHandover()": {
            "details": "Request a two-step ownership handover to the caller. The request will automatically expire in 48 hours (172800 seconds) by default."
          },
          "transferOwnership(address)": {
            "details": "Allows the owner to transfer the ownership to `newOwner`."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin-contracts/=lib/protocol-core/lib/oracle-module/lib/openzeppelin-contracts/contracts/",
        "@openzeppelin/contracts/=lib/protocol-core/lib/openzeppelin-contracts/contracts/",
        "descent-collective/oracle-module/=lib/protocol-core/lib/oracle-module/src/",
        "descent-collective/protocol-core/=lib/protocol-core/src/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/protocol-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/protocol-core/lib/openzeppelin-contracts/",
        "oracle-module/=lib/protocol-core/lib/oracle-module/",
        "permit2/=lib/permit2/src/",
        "protocol-core/=lib/protocol-core/",
        "solady/=lib/protocol-core/lib/solady/src/",
        "solmate/=lib/permit2/lib/solmate/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/vaultRouter.sol": "VaultRouter"
      },
      "libraries": {}
    },
    "sources": {
      "lib/permit2/src/interfaces/IAllowanceTransfer.sol": {
        "keccak256": "0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29",
        "urls": [
          "bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0",
          "dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN"
        ],
        "license": "MIT"
      },
      "lib/permit2/src/interfaces/IEIP712.sol": {
        "keccak256": "0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138",
        "urls": [
          "bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72",
          "dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk"
        ],
        "license": "MIT"
      },
      "lib/permit2/src/interfaces/IPermit2.sol": {
        "keccak256": "0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771",
        "urls": [
          "bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d",
          "dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96"
        ],
        "license": "MIT"
      },
      "lib/permit2/src/interfaces/ISignatureTransfer.sol": {
        "keccak256": "0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e",
        "urls": [
          "bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317",
          "dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d"
        ],
        "license": "MIT"
      },
      "lib/protocol-core/lib/solady/src/auth/Ownable.sol": {
        "keccak256": "0xc208cdd9de02bbf4b5edad18b88e23a2be7ff56d2287d5649329dc7cda64b9a3",
        "urls": [
          "bzz-raw://e8fba079cc7230c617f7493a2e97873f88e59a53a5018fcb2e2b6ac42d8aa5a3",
          "dweb:/ipfs/QmTXg8GSt8hsK2cZhbPFrund1mrwVdkLQmEPoQaFy4fhjs"
        ],
        "license": "MIT"
      },
      "lib/protocol-core/lib/solady/src/tokens/ERC20.sol": {
        "keccak256": "0xb4a3f9ba8a05107f7370de42cff57f3ad26dafd438712c11531a5892de2f59e0",
        "urls": [
          "bzz-raw://f0a9ca06e3cf6dea1f9a4c5599581573b7d81cd64dc3afb582f325ccf5fdd6dc",
          "dweb:/ipfs/Qmb9r5dDceNF4W8S5u6i85RsNTgE5XG9HbTXkyS25ad3C6"
        ],
        "license": "MIT"
      },
      "lib/protocol-core/lib/solady/src/utils/SafeTransferLib.sol": {
        "keccak256": "0xf98506fade18a92e3d8d0a0ca0bdaeaa099d7620aac2a9d76b5f3d0bcd10691c",
        "urls": [
          "bzz-raw://a3495c9d108bc69951a12c5ce9f05851cc921f0bb69e2505756e79f3ddab4e1a",
          "dweb:/ipfs/QmT3XwbmdbQCxw7iNcF7DoiypDd5vs2ETFWirXqmJ86Meg"
        ],
        "license": "MIT"
      },
      "lib/protocol-core/src/currency.sol": {
        "keccak256": "0xc266e97010a71e6ac755dce3e51a5a5844663b355e20ab40bf2020fd9308369b",
        "urls": [
          "bzz-raw://d2660220b8a14c6d06351765dd7accec03e350e7fa9ae960c1505bea1e5d8d2d",
          "dweb:/ipfs/QmdYdPSnQC2nym38Fca4vRLKU4A78AQkgYasdg3TaRLGNY"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/helpers/pausable.sol": {
        "keccak256": "0x8acce52dcd450c73da0f77d9539962826da23aca05aa7d0c7568614e89aed997",
        "urls": [
          "bzz-raw://35e2f674e01c0d6107f31d1c32bb2780d442420b7d26636f560a4eb1007f4a8b",
          "dweb:/ipfs/QmWwVLUGiJq6Q3fK6Zhx4pc6kaqC73pkZ1ntfVA3QCHTpd"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/interfaces/ICurrency.sol": {
        "keccak256": "0x3b7adace3df08c34906612358d435ffff3b90b5eec0eae34b6335cc8dcd0e7ed",
        "urls": [
          "bzz-raw://370c80ec5636bd95342256d4116f703e633e6b0467ee530397e9b5cada37f998",
          "dweb:/ipfs/QmPQ5KY37JpfuSAXpJ16kBXAQVJcE253cfjYGcBEcMLERz"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/interfaces/IRate.sol": {
        "keccak256": "0x166dc423b74b60302197a27fb64557ee8ef6bafe416deb08fe7ecf94f0ede1d1",
        "urls": [
          "bzz-raw://123ef521857e33b10b6f92b743831b26dd5100e57271353bf5c1882fc41c6a2e",
          "dweb:/ipfs/QmdK5y8SntLHAVoNRq6isddmNYunrpv1JxAxyEgRiHdAAj"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/interfaces/IVault.sol": {
        "keccak256": "0x5684f59679e090ebe583d31fda6d8882469436e71670a4873151793675c7c6c4",
        "urls": [
          "bzz-raw://b265c21b1ff01a8c5cf9b1120feb6b5419a96a0e2a6d1ff4bdd89934c7869c9c",
          "dweb:/ipfs/QmdbCgiYE763cAHZ6nevhf7EzF8BzEkfwsbw4qWuxBkm8f"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/mocks/ERC20Token.sol": {
        "keccak256": "0x62b878fb4dde1f455866e0c1290cc50714805d02c2848a4a9bb33c5dfbc8464d",
        "urls": [
          "bzz-raw://7af3f5638d366abfbca3186813449259a33ed43e7c13ec983d389d73df1ad204",
          "dweb:/ipfs/QmeMdoEVTGqdcgSicTTcmycSQjToT7Sn5ZTgZdVFH9E6HA"
        ],
        "license": "GPL-3.0"
      },
      "lib/protocol-core/src/vault.sol": {
        "keccak256": "0xfed823950fe0e1c09191b596b689d5c2942de66ec13cba4ad5a799cecee2f140",
        "urls": [
          "bzz-raw://a044bd7f626b4835fe13962c0873ddab89030b362049fdd00050cc9c072371b5",
          "dweb:/ipfs/QmTiH4NcKNXYfPd4AipFWVkjveJFcJCQtjsGWsxobs4fW1"
        ],
        "license": "GPL-3.0"
      },
      "src/vaultRouter.sol": {
        "keccak256": "0x1bc0cd476a75b0743449179be45058e351abfd82fed032134d7a9464a23674ad",
        "urls": [
          "bzz-raw://04c7f777f6f8200baaaa6bec6b4ddea803058afeaecc880a3bb8eb928d69ed51",
          "dweb:/ipfs/QmTyyesneXtrXnETLNBCNWGYGL1myRnS4g8ESKStbr9HQ4"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/vaultRouter.sol",
    "id": 51655,
    "exportedSymbols": {
      "ERC20": [46441],
      "IAllowanceTransfer": [43676],
      "IPermit2": [43696],
      "ISignatureTransfer": [43836],
      "Ownable": [44998],
      "SafeTransferLib": [45613],
      "Vault": [48277],
      "VaultRouter": [51654]
    },
    "nodeType": "SourceUnit",
    "src": "32:7765:50",
    "nodes": [
      {
        "id": 50945,
        "nodeType": "PragmaDirective",
        "src": "32:23:50",
        "nodes": [],
        "literals": ["solidity", "0.8", ".21"]
      },
      {
        "id": 50947,
        "nodeType": "ImportDirective",
        "src": "104:79:50",
        "nodes": [],
        "absolutePath": "lib/protocol-core/src/vault.sol",
        "file": "descent-collective/protocol-core/vault.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51655,
        "sourceUnit": 48278,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50946,
              "name": "ERC20Token",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46441,
              "src": "112:10:50",
              "typeDescriptions": {}
            },
            "local": "ERC20",
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50949,
        "nodeType": "ImportDirective",
        "src": "184:48:50",
        "nodes": [],
        "absolutePath": "lib/protocol-core/lib/solady/src/auth/Ownable.sol",
        "file": "solady/auth/Ownable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51655,
        "sourceUnit": 44999,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50948,
              "name": "Ownable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 44998,
              "src": "192:7:50",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50951,
        "nodeType": "ImportDirective",
        "src": "233:65:50",
        "nodes": [],
        "absolutePath": "lib/protocol-core/lib/solady/src/utils/SafeTransferLib.sol",
        "file": "solady/utils/SafeTransferLib.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51655,
        "sourceUnit": 45614,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50950,
              "name": "SafeTransferLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45613,
              "src": "241:15:50",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50953,
        "nodeType": "ImportDirective",
        "src": "299:65:50",
        "nodes": [],
        "absolutePath": "lib/protocol-core/src/vault.sol",
        "file": "descent-collective/protocol-core/vault.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51655,
        "sourceUnit": 48278,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50952,
              "name": "Vault",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48277,
              "src": "307:5:50",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 50957,
        "nodeType": "ImportDirective",
        "src": "365:97:50",
        "nodes": [],
        "absolutePath": "lib/permit2/src/interfaces/IPermit2.sol",
        "file": "permit2/interfaces/IPermit2.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 51655,
        "sourceUnit": 43697,
        "symbolAliases": [
          {
            "foreign": {
              "id": 50954,
              "name": "IPermit2",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 43696,
              "src": "373:8:50",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 50955,
              "name": "ISignatureTransfer",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 43836,
              "src": "383:18:50",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 50956,
              "name": "IAllowanceTransfer",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 43676,
              "src": "403:18:50",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51654,
        "nodeType": "ContractDefinition",
        "src": "464:7332:50",
        "nodes": [
          {
            "id": 50965,
            "nodeType": "VariableDeclaration",
            "src": "502:80:50",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "permit2",
            "nameLocation": "520:7:50",
            "scope": 51654,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IPermit2_$43696",
              "typeString": "contract IPermit2"
            },
            "typeName": {
              "id": 50961,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 50960,
                "name": "IPermit2",
                "nameLocations": ["502:8:50"],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 43696,
                "src": "502:8:50"
              },
              "referencedDeclaration": 43696,
              "src": "502:8:50",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPermit2_$43696",
                "typeString": "contract IPermit2"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307830303030303030303030323244343733303330463131366444454539463642343361433738424133",
                  "id": 50963,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "539:42:50",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 50962,
                "name": "IPermit2",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 43696,
                "src": "530:8:50",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_IPermit2_$43696_$",
                  "typeString": "type(contract IPermit2)"
                }
              },
              "id": 50964,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "nameLocations": [],
              "names": [],
              "nodeType": "FunctionCall",
              "src": "530:52:50",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPermit2_$43696",
                "typeString": "contract IPermit2"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 50967,
            "nodeType": "ErrorDefinition",
            "src": "589:31:50",
            "nodes": [],
            "errorSelector": "3a89615b",
            "name": "MisMatchedInputsLength",
            "nameLocation": "595:22:50",
            "parameters": {
              "id": 50966,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "617:2:50"
            }
          },
          {
            "id": 50969,
            "nodeType": "ErrorDefinition",
            "src": "625:19:50",
            "nodes": [],
            "errorSelector": "c4bd89a9",
            "name": "UnsafeCast",
            "nameLocation": "631:10:50",
            "parameters": {
              "id": 50968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "641:2:50"
            }
          },
          {
            "id": 50975,
            "nodeType": "ErrorDefinition",
            "src": "649:76:50",
            "nodes": [],
            "errorSelector": "b046f372",
            "name": "InvalidEncodedParameterLength",
            "nameLocation": "655:29:50",
            "parameters": {
              "id": 50974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50971,
                  "mutability": "mutable",
                  "name": "expectedLength",
                  "nameLocation": "693:14:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "685:22:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50970,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "685:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50973,
                  "mutability": "mutable",
                  "name": "length",
                  "nameLocation": "717:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 50975,
                  "src": "709:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 50972,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "709:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "684:40:50"
            }
          },
          {
            "id": 50984,
            "nodeType": "FunctionDefinition",
            "src": "731:59:50",
            "nodes": [],
            "body": {
              "id": 50983,
              "nodeType": "Block",
              "src": "745:45:50",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 50979,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "772:3:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 50980,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "776:6:50",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "772:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 50978,
                      "name": "_initializeOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44877,
                      "src": "755:16:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 50981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "755:28:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 50982,
                  "nodeType": "ExpressionStatement",
                  "src": "755:28:50"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 50976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "742:2:50"
            },
            "returnParameters": {
              "id": 50977,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "745:0:50"
            },
            "scope": 51654,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 50995,
            "nodeType": "EnumDefinition",
            "src": "796:365:50",
            "nodes": [],
            "canonicalName": "VaultRouter.Operations",
            "members": [
              {
                "id": 50985,
                "name": "Invalid",
                "nameLocation": "822:7:50",
                "nodeType": "EnumValue",
                "src": "822:7:50"
              },
              {
                "id": 50986,
                "name": "DepositCollateral",
                "nameLocation": "867:17:50",
                "nodeType": "EnumValue",
                "src": "867:17:50"
              },
              {
                "id": 50987,
                "name": "WithdrawCollateral",
                "nameLocation": "894:18:50",
                "nodeType": "EnumValue",
                "src": "894:18:50"
              },
              {
                "id": 50988,
                "name": "MintCurrency",
                "nameLocation": "922:12:50",
                "nodeType": "EnumValue",
                "src": "922:12:50"
              },
              {
                "id": 50989,
                "name": "BurnCurrency",
                "nameLocation": "944:12:50",
                "nodeType": "EnumValue",
                "src": "944:12:50"
              },
              {
                "id": 50990,
                "name": "Permit2_PermitTransferFrom",
                "nameLocation": "996:26:50",
                "nodeType": "EnumValue",
                "src": "996:26:50"
              },
              {
                "id": 50991,
                "name": "Permit2_Permit",
                "nameLocation": "1032:14:50",
                "nodeType": "EnumValue",
                "src": "1032:14:50"
              },
              {
                "id": 50992,
                "name": "Permit2_TransferFrom",
                "nameLocation": "1056:20:50",
                "nodeType": "EnumValue",
                "src": "1056:20:50"
              },
              {
                "id": 50993,
                "name": "ERC20_Permit",
                "nameLocation": "1115:12:50",
                "nodeType": "EnumValue",
                "src": "1115:12:50"
              },
              {
                "id": 50994,
                "name": "ERC20_TransferFrom",
                "nameLocation": "1137:18:50",
                "nodeType": "EnumValue",
                "src": "1137:18:50"
              }
            ],
            "name": "Operations",
            "nameLocation": "801:10:50"
          },
          {
            "id": 51587,
            "nodeType": "FunctionDefinition",
            "src": "1167:5973:50",
            "nodes": [],
            "body": {
              "id": 51586,
              "nodeType": "Block",
              "src": "1270:5870:50",
              "nodes": [],
              "statements": [
                {
                  "id": 51585,
                  "nodeType": "UncheckedBlock",
                  "src": "1280:5854:50",
                  "statements": [
                    {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 51003,
                            "name": "_packedOperations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50997,
                            "src": "1308:17:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 51004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1326:6:50",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "1308:24:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "expression": {
                            "id": 51005,
                            "name": "_encodedParameters",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51000,
                            "src": "1336:18:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 51006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1355:6:50",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "1336:25:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1308:53:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 51011,
                      "nodeType": "IfStatement",
                      "src": "1304:90:50",
                      "trueBody": {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 51008,
                            "name": "MisMatchedInputsLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50967,
                            "src": "1370:22:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 51009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1370:24:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51010,
                        "nodeType": "RevertStatement",
                        "src": "1363:31:50"
                      }
                    },
                    {
                      "assignments": [51013],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 51013,
                          "mutability": "mutable",
                          "name": "_operation",
                          "nameLocation": "1414:10:50",
                          "nodeType": "VariableDeclaration",
                          "scope": 51585,
                          "src": "1408:16:50",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "typeName": {
                            "id": 51012,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "1408:5:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 51014,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1408:16:50"
                    },
                    {
                      "body": {
                        "id": 51583,
                        "nodeType": "Block",
                        "src": "1490:5634:50",
                        "statements": [
                          {
                            "expression": {
                              "id": 51032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 51025,
                                "name": "_operation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51013,
                                "src": "1508:10:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 51028,
                                      "name": "_packedOperations",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 50997,
                                      "src": "1527:17:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    },
                                    "id": 51030,
                                    "indexExpression": {
                                      "id": 51029,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 51016,
                                      "src": "1545:1:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "1527:20:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  ],
                                  "id": 51027,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1521:5:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  },
                                  "typeName": {
                                    "id": 51026,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1521:5:50",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 51031,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1521:27:50",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "1508:40:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 51033,
                            "nodeType": "ExpressionStatement",
                            "src": "1508:40:50"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_enum$_Operations_$50995",
                                "typeString": "enum VaultRouter.Operations"
                              },
                              "id": 51039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 51035,
                                    "name": "_operation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 51013,
                                    "src": "1581:10:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "id": 51034,
                                  "name": "Operations",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 50995,
                                  "src": "1570:10:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                    "typeString": "type(enum VaultRouter.Operations)"
                                  }
                                },
                                "id": 51036,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1570:22:50",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Operations_$50995",
                                  "typeString": "enum VaultRouter.Operations"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "id": 51037,
                                  "name": "Operations",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 50995,
                                  "src": "1596:10:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                    "typeString": "type(enum VaultRouter.Operations)"
                                  }
                                },
                                "id": 51038,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "1607:7:50",
                                "memberName": "Invalid",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 50985,
                                "src": "1596:18:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Operations_$50995",
                                  "typeString": "enum VaultRouter.Operations"
                                }
                              },
                              "src": "1570:44:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Operations_$50995",
                                  "typeString": "enum VaultRouter.Operations"
                                },
                                "id": 51047,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 51043,
                                      "name": "_operation",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 51013,
                                      "src": "1683:10:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    ],
                                    "id": 51042,
                                    "name": "Operations",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50995,
                                    "src": "1672:10:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                      "typeString": "type(enum VaultRouter.Operations)"
                                    }
                                  },
                                  "id": 51044,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1672:22:50",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Operations_$50995",
                                    "typeString": "enum VaultRouter.Operations"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "expression": {
                                    "id": 51045,
                                    "name": "Operations",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 50995,
                                    "src": "1698:10:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                      "typeString": "type(enum VaultRouter.Operations)"
                                    }
                                  },
                                  "id": 51046,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "1709:26:50",
                                  "memberName": "Permit2_PermitTransferFrom",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 50990,
                                  "src": "1698:37:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Operations_$50995",
                                    "typeString": "enum VaultRouter.Operations"
                                  }
                                },
                                "src": "1672:63:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_Operations_$50995",
                                    "typeString": "enum VaultRouter.Operations"
                                  },
                                  "id": 51115,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 51111,
                                        "name": "_operation",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 51013,
                                        "src": "2624:10:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      ],
                                      "id": 51110,
                                      "name": "Operations",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 50995,
                                      "src": "2613:10:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                        "typeString": "type(enum VaultRouter.Operations)"
                                      }
                                    },
                                    "id": 51112,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2613:22:50",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Operations_$50995",
                                      "typeString": "enum VaultRouter.Operations"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 51113,
                                      "name": "Operations",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 50995,
                                      "src": "2639:10:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                        "typeString": "type(enum VaultRouter.Operations)"
                                      }
                                    },
                                    "id": 51114,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "2650:14:50",
                                    "memberName": "Permit2_Permit",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 50991,
                                    "src": "2639:25:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Operations_$50995",
                                      "typeString": "enum VaultRouter.Operations"
                                    }
                                  },
                                  "src": "2613:51:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_enum$_Operations_$50995",
                                      "typeString": "enum VaultRouter.Operations"
                                    },
                                    "id": 51214,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 51210,
                                          "name": "_operation",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 51013,
                                          "src": "3933:10:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        ],
                                        "id": 51209,
                                        "name": "Operations",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 50995,
                                        "src": "3922:10:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                          "typeString": "type(enum VaultRouter.Operations)"
                                        }
                                      },
                                      "id": 51211,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3922:22:50",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_Operations_$50995",
                                        "typeString": "enum VaultRouter.Operations"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 51212,
                                        "name": "Operations",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 50995,
                                        "src": "3948:10:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                          "typeString": "type(enum VaultRouter.Operations)"
                                        }
                                      },
                                      "id": 51213,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "3959:20:50",
                                      "memberName": "Permit2_TransferFrom",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 50992,
                                      "src": "3948:31:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_Operations_$50995",
                                        "typeString": "enum VaultRouter.Operations"
                                      }
                                    },
                                    "src": "3922:57:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseBody": {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_enum$_Operations_$50995",
                                        "typeString": "enum VaultRouter.Operations"
                                      },
                                      "id": 51267,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "arguments": [
                                          {
                                            "id": 51263,
                                            "name": "_operation",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 51013,
                                            "src": "4386:10:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          ],
                                          "id": 51262,
                                          "name": "Operations",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 50995,
                                          "src": "4375:10:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                            "typeString": "type(enum VaultRouter.Operations)"
                                          }
                                        },
                                        "id": 51264,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4375:22:50",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_Operations_$50995",
                                          "typeString": "enum VaultRouter.Operations"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "expression": {
                                          "id": 51265,
                                          "name": "Operations",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 50995,
                                          "src": "4401:10:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                            "typeString": "type(enum VaultRouter.Operations)"
                                          }
                                        },
                                        "id": 51266,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "4412:17:50",
                                        "memberName": "DepositCollateral",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 50986,
                                        "src": "4401:28:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_enum$_Operations_$50995",
                                          "typeString": "enum VaultRouter.Operations"
                                        }
                                      },
                                      "src": "4375:54:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_enum$_Operations_$50995",
                                          "typeString": "enum VaultRouter.Operations"
                                        },
                                        "id": 51310,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "arguments": [
                                            {
                                              "id": 51306,
                                              "name": "_operation",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51013,
                                              "src": "4809:10:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            ],
                                            "id": 51305,
                                            "name": "Operations",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 50995,
                                            "src": "4798:10:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                              "typeString": "type(enum VaultRouter.Operations)"
                                            }
                                          },
                                          "id": 51307,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "4798:22:50",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Operations_$50995",
                                            "typeString": "enum VaultRouter.Operations"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 51308,
                                            "name": "Operations",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 50995,
                                            "src": "4824:10:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                              "typeString": "type(enum VaultRouter.Operations)"
                                            }
                                          },
                                          "id": 51309,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberLocation": "4835:18:50",
                                          "memberName": "WithdrawCollateral",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 50987,
                                          "src": "4824:29:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Operations_$50995",
                                            "typeString": "enum VaultRouter.Operations"
                                          }
                                        },
                                        "src": "4798:55:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseBody": {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_enum$_Operations_$50995",
                                            "typeString": "enum VaultRouter.Operations"
                                          },
                                          "id": 51358,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "arguments": [
                                              {
                                                "id": 51354,
                                                "name": "_operation",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51013,
                                                "src": "5262:10:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              ],
                                              "id": 51353,
                                              "name": "Operations",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 50995,
                                              "src": "5251:10:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                "typeString": "type(enum VaultRouter.Operations)"
                                              }
                                            },
                                            "id": 51355,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "5251:22:50",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_Operations_$50995",
                                              "typeString": "enum VaultRouter.Operations"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "expression": {
                                              "id": 51356,
                                              "name": "Operations",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 50995,
                                              "src": "5277:10:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                "typeString": "type(enum VaultRouter.Operations)"
                                              }
                                            },
                                            "id": 51357,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "5288:12:50",
                                            "memberName": "MintCurrency",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 50988,
                                            "src": "5277:23:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_Operations_$50995",
                                              "typeString": "enum VaultRouter.Operations"
                                            }
                                          },
                                          "src": "5251:49:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "condition": {
                                            "commonType": {
                                              "typeIdentifier": "t_enum$_Operations_$50995",
                                              "typeString": "enum VaultRouter.Operations"
                                            },
                                            "id": 51406,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "arguments": [
                                                {
                                                  "id": 51402,
                                                  "name": "_operation",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51013,
                                                  "src": "5703:10:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                ],
                                                "id": 51401,
                                                "name": "Operations",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 50995,
                                                "src": "5692:10:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                  "typeString": "type(enum VaultRouter.Operations)"
                                                }
                                              },
                                              "id": 51403,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "5692:22:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_Operations_$50995",
                                                "typeString": "enum VaultRouter.Operations"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                              "expression": {
                                                "id": 51404,
                                                "name": "Operations",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 50995,
                                                "src": "5718:10:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                  "typeString": "type(enum VaultRouter.Operations)"
                                                }
                                              },
                                              "id": 51405,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberLocation": "5729:12:50",
                                              "memberName": "BurnCurrency",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 50989,
                                              "src": "5718:23:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_Operations_$50995",
                                                "typeString": "enum VaultRouter.Operations"
                                              }
                                            },
                                            "src": "5692:49:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          "falseBody": {
                                            "condition": {
                                              "commonType": {
                                                "typeIdentifier": "t_enum$_Operations_$50995",
                                                "typeString": "enum VaultRouter.Operations"
                                              },
                                              "id": 51449,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "arguments": [
                                                  {
                                                    "id": 51445,
                                                    "name": "_operation",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51013,
                                                    "src": "6116:10:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint8",
                                                      "typeString": "uint8"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint8",
                                                      "typeString": "uint8"
                                                    }
                                                  ],
                                                  "id": 51444,
                                                  "name": "Operations",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 50995,
                                                  "src": "6105:10:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                    "typeString": "type(enum VaultRouter.Operations)"
                                                  }
                                                },
                                                "id": 51446,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6105:22:50",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_enum$_Operations_$50995",
                                                  "typeString": "enum VaultRouter.Operations"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "==",
                                              "rightExpression": {
                                                "expression": {
                                                  "id": 51447,
                                                  "name": "Operations",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 50995,
                                                  "src": "6131:10:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                    "typeString": "type(enum VaultRouter.Operations)"
                                                  }
                                                },
                                                "id": 51448,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberLocation": "6142:12:50",
                                                "memberName": "ERC20_Permit",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 50993,
                                                "src": "6131:23:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_enum$_Operations_$50995",
                                                  "typeString": "enum VaultRouter.Operations"
                                                }
                                              },
                                              "src": "6105:49:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            },
                                            "falseBody": {
                                              "condition": {
                                                "commonType": {
                                                  "typeIdentifier": "t_enum$_Operations_$50995",
                                                  "typeString": "enum VaultRouter.Operations"
                                                },
                                                "id": 51526,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "arguments": [
                                                    {
                                                      "id": 51522,
                                                      "name": "_operation",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51013,
                                                      "src": "6702:10:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                      }
                                                    ],
                                                    "id": 51521,
                                                    "name": "Operations",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 50995,
                                                    "src": "6691:10:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                      "typeString": "type(enum VaultRouter.Operations)"
                                                    }
                                                  },
                                                  "id": 51523,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "typeConversion",
                                                  "lValueRequested": false,
                                                  "nameLocations": [],
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "6691:22:50",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_Operations_$50995",
                                                    "typeString": "enum VaultRouter.Operations"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                  "expression": {
                                                    "id": 51524,
                                                    "name": "Operations",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 50995,
                                                    "src": "6717:10:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_enum$_Operations_$50995_$",
                                                      "typeString": "type(enum VaultRouter.Operations)"
                                                    }
                                                  },
                                                  "id": 51525,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "memberLocation": "6728:18:50",
                                                  "memberName": "ERC20_TransferFrom",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 50994,
                                                  "src": "6717:29:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_Operations_$50995",
                                                    "typeString": "enum VaultRouter.Operations"
                                                  }
                                                },
                                                "src": "6691:55:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              "id": 51573,
                                              "nodeType": "IfStatement",
                                              "src": "6687:423:50",
                                              "trueBody": {
                                                "id": 51572,
                                                "nodeType": "Block",
                                                "src": "6748:362:50",
                                                "statements": [
                                                  {
                                                    "expression": {
                                                      "arguments": [
                                                        {
                                                          "baseExpression": {
                                                            "id": 51528,
                                                            "name": "_encodedParameters",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51000,
                                                            "src": "6797:18:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                              "typeString": "bytes calldata[] calldata"
                                                            }
                                                          },
                                                          "id": 51530,
                                                          "indexExpression": {
                                                            "id": 51529,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51016,
                                                            "src": "6816:1:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "nodeType": "IndexAccess",
                                                          "src": "6797:21:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                          }
                                                        },
                                                        {
                                                          "hexValue": "3634",
                                                          "id": 51531,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "6820:2:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_64_by_1",
                                                            "typeString": "int_const 64"
                                                          },
                                                          "value": "64"
                                                        }
                                                      ],
                                                      "expression": {
                                                        "argumentTypes": [
                                                          {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                          },
                                                          {
                                                            "typeIdentifier": "t_rational_64_by_1",
                                                            "typeString": "int_const 64"
                                                          }
                                                        ],
                                                        "id": 51527,
                                                        "name": "_requireInputIsRightLength",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51634,
                                                        "src": "6770:26:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                                          "typeString": "function (bytes calldata,uint256) pure"
                                                        }
                                                      },
                                                      "id": 51532,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "kind": "functionCall",
                                                      "lValueRequested": false,
                                                      "nameLocations": [],
                                                      "names": [],
                                                      "nodeType": "FunctionCall",
                                                      "src": "6770:53:50",
                                                      "tryCall": false,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                      }
                                                    },
                                                    "id": 51533,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "6770:53:50"
                                                  },
                                                  {
                                                    "assignments": [51535, 51537],
                                                    "declarations": [
                                                      {
                                                        "constant": false,
                                                        "id": 51535,
                                                        "mutability": "mutable",
                                                        "name": "_token",
                                                        "nameLocation": "6854:6:50",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 51572,
                                                        "src": "6846:14:50",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        },
                                                        "typeName": {
                                                          "id": 51534,
                                                          "name": "address",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "6846:7:50",
                                                          "stateMutability": "nonpayable",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          }
                                                        },
                                                        "visibility": "internal"
                                                      },
                                                      {
                                                        "constant": false,
                                                        "id": 51537,
                                                        "mutability": "mutable",
                                                        "name": "_amount",
                                                        "nameLocation": "6870:7:50",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 51572,
                                                        "src": "6862:15:50",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "typeName": {
                                                          "id": 51536,
                                                          "name": "uint256",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "6862:7:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "visibility": "internal"
                                                      }
                                                    ],
                                                    "id": 51549,
                                                    "initialValue": {
                                                      "arguments": [
                                                        {
                                                          "baseExpression": {
                                                            "id": 51540,
                                                            "name": "_encodedParameters",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51000,
                                                            "src": "6892:18:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                              "typeString": "bytes calldata[] calldata"
                                                            }
                                                          },
                                                          "id": 51542,
                                                          "indexExpression": {
                                                            "id": 51541,
                                                            "name": "i",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51016,
                                                            "src": "6911:1:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "nodeType": "IndexAccess",
                                                          "src": "6892:21:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                          }
                                                        },
                                                        {
                                                          "components": [
                                                            {
                                                              "id": 51544,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "nodeType": "ElementaryTypeNameExpression",
                                                              "src": "6916:7:50",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_address_$",
                                                                "typeString": "type(address)"
                                                              },
                                                              "typeName": {
                                                                "id": 51543,
                                                                "name": "address",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "6916:7:50",
                                                                "typeDescriptions": {}
                                                              }
                                                            },
                                                            {
                                                              "id": 51546,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "nodeType": "ElementaryTypeNameExpression",
                                                              "src": "6925:7:50",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                                "typeString": "type(uint256)"
                                                              },
                                                              "typeName": {
                                                                "id": 51545,
                                                                "name": "uint256",
                                                                "nodeType": "ElementaryTypeName",
                                                                "src": "6925:7:50",
                                                                "typeDescriptions": {}
                                                              }
                                                            }
                                                          ],
                                                          "id": 51547,
                                                          "isConstant": false,
                                                          "isInlineArray": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "TupleExpression",
                                                          "src": "6915:18:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                            "typeString": "tuple(type(address),type(uint256))"
                                                          }
                                                        }
                                                      ],
                                                      "expression": {
                                                        "argumentTypes": [
                                                          {
                                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                                            "typeString": "bytes calldata"
                                                          },
                                                          {
                                                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                            "typeString": "tuple(type(address),type(uint256))"
                                                          }
                                                        ],
                                                        "expression": {
                                                          "id": 51538,
                                                          "name": "abi",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": -1,
                                                          "src": "6881:3:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                          }
                                                        },
                                                        "id": 51539,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberLocation": "6885:6:50",
                                                        "memberName": "decode",
                                                        "nodeType": "MemberAccess",
                                                        "src": "6881:10:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                          "typeString": "function () pure"
                                                        }
                                                      },
                                                      "id": 51548,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "kind": "functionCall",
                                                      "lValueRequested": false,
                                                      "nameLocations": [],
                                                      "names": [],
                                                      "nodeType": "FunctionCall",
                                                      "src": "6881:53:50",
                                                      "tryCall": false,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_uint256_$",
                                                        "typeString": "tuple(address payable,uint256)"
                                                      }
                                                    },
                                                    "nodeType": "VariableDeclarationStatement",
                                                    "src": "6845:89:50"
                                                  },
                                                  {
                                                    "condition": {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 51554,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "expression": {
                                                          "expression": {
                                                            "id": 51550,
                                                            "name": "_token",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51535,
                                                            "src": "6960:6:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_address",
                                                              "typeString": "address"
                                                            }
                                                          },
                                                          "id": 51551,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "memberLocation": "6967:4:50",
                                                          "memberName": "code",
                                                          "nodeType": "MemberAccess",
                                                          "src": "6960:11:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                          }
                                                        },
                                                        "id": 51552,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberLocation": "6972:6:50",
                                                        "memberName": "length",
                                                        "nodeType": "MemberAccess",
                                                        "src": "6960:18:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "==",
                                                      "rightExpression": {
                                                        "hexValue": "30",
                                                        "id": 51553,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "6982:1:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_0_by_1",
                                                          "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                      },
                                                      "src": "6960:23:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                      }
                                                    },
                                                    "id": 51558,
                                                    "nodeType": "IfStatement",
                                                    "src": "6956:37:50",
                                                    "trueBody": {
                                                      "expression": {
                                                        "arguments": [],
                                                        "expression": {
                                                          "argumentTypes": [],
                                                          "id": 51555,
                                                          "name": "revert",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [-19, -19],
                                                          "referencedDeclaration": -19,
                                                          "src": "6985:6:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                          }
                                                        },
                                                        "id": 51556,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "nameLocations": [],
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "6985:8:50",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_tuple$__$",
                                                          "typeString": "tuple()"
                                                        }
                                                      },
                                                      "id": 51557,
                                                      "nodeType": "ExpressionStatement",
                                                      "src": "6985:8:50"
                                                    }
                                                  },
                                                  {
                                                    "expression": {
                                                      "arguments": [
                                                        {
                                                          "id": 51562,
                                                          "name": "_token",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51535,
                                                          "src": "7048:6:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          }
                                                        },
                                                        {
                                                          "expression": {
                                                            "id": 51563,
                                                            "name": "msg",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -15,
                                                            "src": "7056:3:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_magic_message",
                                                              "typeString": "msg"
                                                            }
                                                          },
                                                          "id": 51564,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "memberLocation": "7060:6:50",
                                                          "memberName": "sender",
                                                          "nodeType": "MemberAccess",
                                                          "src": "7056:10:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          }
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "id": 51567,
                                                              "name": "this",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": -28,
                                                              "src": "7076:4:50",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                                "typeString": "contract VaultRouter"
                                                              }
                                                            }
                                                          ],
                                                          "expression": {
                                                            "argumentTypes": [
                                                              {
                                                                "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                                "typeString": "contract VaultRouter"
                                                              }
                                                            ],
                                                            "id": 51566,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "7068:7:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_address_$",
                                                              "typeString": "type(address)"
                                                            },
                                                            "typeName": {
                                                              "id": 51565,
                                                              "name": "address",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "7068:7:50",
                                                              "typeDescriptions": {}
                                                            }
                                                          },
                                                          "id": 51568,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "kind": "typeConversion",
                                                          "lValueRequested": false,
                                                          "nameLocations": [],
                                                          "names": [],
                                                          "nodeType": "FunctionCall",
                                                          "src": "7068:13:50",
                                                          "tryCall": false,
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          }
                                                        },
                                                        {
                                                          "id": 51569,
                                                          "name": "_amount",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51537,
                                                          "src": "7083:7:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        }
                                                      ],
                                                      "expression": {
                                                        "argumentTypes": [
                                                          {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          },
                                                          {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          },
                                                          {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                          },
                                                          {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        ],
                                                        "expression": {
                                                          "id": 51559,
                                                          "name": "SafeTransferLib",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 45613,
                                                          "src": "7015:15:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$45613_$",
                                                            "typeString": "type(library SafeTransferLib)"
                                                          }
                                                        },
                                                        "id": 51561,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberLocation": "7031:16:50",
                                                        "memberName": "safeTransferFrom",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 45538,
                                                        "src": "7015:32:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                          "typeString": "function (address,address,address,uint256)"
                                                        }
                                                      },
                                                      "id": 51570,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "kind": "functionCall",
                                                      "lValueRequested": false,
                                                      "nameLocations": [],
                                                      "names": [],
                                                      "nodeType": "FunctionCall",
                                                      "src": "7015:76:50",
                                                      "tryCall": false,
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                      }
                                                    },
                                                    "id": 51571,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "7015:76:50"
                                                  }
                                                ]
                                              }
                                            },
                                            "id": 51574,
                                            "nodeType": "IfStatement",
                                            "src": "6101:1009:50",
                                            "trueBody": {
                                              "id": 51520,
                                              "nodeType": "Block",
                                              "src": "6156:525:50",
                                              "statements": [
                                                {
                                                  "expression": {
                                                    "arguments": [
                                                      {
                                                        "baseExpression": {
                                                          "id": 51451,
                                                          "name": "_encodedParameters",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51000,
                                                          "src": "6205:18:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                            "typeString": "bytes calldata[] calldata"
                                                          }
                                                        },
                                                        "id": 51453,
                                                        "indexExpression": {
                                                          "id": 51452,
                                                          "name": "i",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51016,
                                                          "src": "6224:1:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6205:21:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                                          "typeString": "bytes calldata"
                                                        }
                                                      },
                                                      {
                                                        "hexValue": "323536",
                                                        "id": 51454,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "6228:3:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_256_by_1",
                                                          "typeString": "int_const 256"
                                                        },
                                                        "value": "256"
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                                          "typeString": "bytes calldata"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_rational_256_by_1",
                                                          "typeString": "int_const 256"
                                                        }
                                                      ],
                                                      "id": 51450,
                                                      "name": "_requireInputIsRightLength",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51634,
                                                      "src": "6178:26:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                                        "typeString": "function (bytes calldata,uint256) pure"
                                                      }
                                                    },
                                                    "id": 51455,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6178:54:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$__$",
                                                      "typeString": "tuple()"
                                                    }
                                                  },
                                                  "id": 51456,
                                                  "nodeType": "ExpressionStatement",
                                                  "src": "6178:54:50"
                                                },
                                                {
                                                  "assignments": [51459, 51461, 51463, 51465],
                                                  "declarations": [
                                                    {
                                                      "constant": false,
                                                      "id": 51459,
                                                      "mutability": "mutable",
                                                      "name": "_token",
                                                      "nameLocation": "6261:6:50",
                                                      "nodeType": "VariableDeclaration",
                                                      "scope": 51520,
                                                      "src": "6255:12:50",
                                                      "stateVariable": false,
                                                      "storageLocation": "default",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                        "typeString": "contract ERC20Token"
                                                      },
                                                      "typeName": {
                                                        "id": 51458,
                                                        "nodeType": "UserDefinedTypeName",
                                                        "pathNode": {
                                                          "id": 51457,
                                                          "name": "ERC20",
                                                          "nameLocations": ["6255:5:50"],
                                                          "nodeType": "IdentifierPath",
                                                          "referencedDeclaration": 46441,
                                                          "src": "6255:5:50"
                                                        },
                                                        "referencedDeclaration": 46441,
                                                        "src": "6255:5:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                          "typeString": "contract ERC20Token"
                                                        }
                                                      },
                                                      "visibility": "internal"
                                                    },
                                                    {
                                                      "constant": false,
                                                      "id": 51461,
                                                      "mutability": "mutable",
                                                      "name": "_amount",
                                                      "nameLocation": "6277:7:50",
                                                      "nodeType": "VariableDeclaration",
                                                      "scope": 51520,
                                                      "src": "6269:15:50",
                                                      "stateVariable": false,
                                                      "storageLocation": "default",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "typeName": {
                                                        "id": 51460,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6269:7:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "visibility": "internal"
                                                    },
                                                    {
                                                      "constant": false,
                                                      "id": 51463,
                                                      "mutability": "mutable",
                                                      "name": "_deadline",
                                                      "nameLocation": "6294:9:50",
                                                      "nodeType": "VariableDeclaration",
                                                      "scope": 51520,
                                                      "src": "6286:17:50",
                                                      "stateVariable": false,
                                                      "storageLocation": "default",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "typeName": {
                                                        "id": 51462,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6286:7:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "visibility": "internal"
                                                    },
                                                    {
                                                      "constant": false,
                                                      "id": 51465,
                                                      "mutability": "mutable",
                                                      "name": "_signature",
                                                      "nameLocation": "6318:10:50",
                                                      "nodeType": "VariableDeclaration",
                                                      "scope": 51520,
                                                      "src": "6305:23:50",
                                                      "stateVariable": false,
                                                      "storageLocation": "memory",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes"
                                                      },
                                                      "typeName": {
                                                        "id": 51464,
                                                        "name": "bytes",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6305:5:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes_storage_ptr",
                                                          "typeString": "bytes"
                                                        }
                                                      },
                                                      "visibility": "internal"
                                                    }
                                                  ],
                                                  "id": 51480,
                                                  "initialValue": {
                                                    "arguments": [
                                                      {
                                                        "baseExpression": {
                                                          "id": 51468,
                                                          "name": "_encodedParameters",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51000,
                                                          "src": "6367:18:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                            "typeString": "bytes calldata[] calldata"
                                                          }
                                                        },
                                                        "id": 51470,
                                                        "indexExpression": {
                                                          "id": 51469,
                                                          "name": "i",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51016,
                                                          "src": "6386:1:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6367:21:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                                          "typeString": "bytes calldata"
                                                        }
                                                      },
                                                      {
                                                        "components": [
                                                          {
                                                            "id": 51471,
                                                            "name": "ERC20",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 46441,
                                                            "src": "6391:5:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_contract$_ERC20Token_$46441_$",
                                                              "typeString": "type(contract ERC20Token)"
                                                            }
                                                          },
                                                          {
                                                            "id": 51473,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6398:7:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_uint256_$",
                                                              "typeString": "type(uint256)"
                                                            },
                                                            "typeName": {
                                                              "id": 51472,
                                                              "name": "uint256",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "6398:7:50",
                                                              "typeDescriptions": {}
                                                            }
                                                          },
                                                          {
                                                            "id": 51475,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6407:7:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_uint256_$",
                                                              "typeString": "type(uint256)"
                                                            },
                                                            "typeName": {
                                                              "id": 51474,
                                                              "name": "uint256",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "6407:7:50",
                                                              "typeDescriptions": {}
                                                            }
                                                          },
                                                          {
                                                            "id": 51477,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6416:5:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                              "typeString": "type(bytes storage pointer)"
                                                            },
                                                            "typeName": {
                                                              "id": 51476,
                                                              "name": "bytes",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "6416:5:50",
                                                              "typeDescriptions": {}
                                                            }
                                                          }
                                                        ],
                                                        "id": 51478,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "6390:32:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_tuple$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                          "typeString": "tuple(type(contract ERC20Token),type(uint256),type(uint256),type(bytes storage pointer))"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                                          "typeString": "bytes calldata"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_tuple$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                                          "typeString": "tuple(type(contract ERC20Token),type(uint256),type(uint256),type(bytes storage pointer))"
                                                        }
                                                      ],
                                                      "expression": {
                                                        "id": 51466,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "6356:3:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_magic_abi",
                                                          "typeString": "abi"
                                                        }
                                                      },
                                                      "id": 51467,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "memberLocation": "6360:6:50",
                                                      "memberName": "decode",
                                                      "nodeType": "MemberAccess",
                                                      "src": "6356:10:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                      }
                                                    },
                                                    "id": 51479,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6356:67:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$_t_contract$_ERC20Token_$46441_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$",
                                                      "typeString": "tuple(contract ERC20Token,uint256,uint256,bytes memory)"
                                                    }
                                                  },
                                                  "nodeType": "VariableDeclarationStatement",
                                                  "src": "6254:169:50"
                                                },
                                                {
                                                  "assignments": [51482, 51484],
                                                  "declarations": [
                                                    {
                                                      "constant": false,
                                                      "id": 51482,
                                                      "mutability": "mutable",
                                                      "name": "_r",
                                                      "nameLocation": "6454:2:50",
                                                      "nodeType": "VariableDeclaration",
                                                      "scope": 51520,
                                                      "src": "6446:10:50",
                                                      "stateVariable": false,
                                                      "storageLocation": "default",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                      },
                                                      "typeName": {
                                                        "id": 51481,
                                                        "name": "bytes32",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6446:7:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes32",
                                                          "typeString": "bytes32"
                                                        }
                                                      },
                                                      "visibility": "internal"
                                                    },
                                                    {
                                                      "constant": false,
                                                      "id": 51484,
                                                      "mutability": "mutable",
                                                      "name": "_s",
                                                      "nameLocation": "6466:2:50",
                                                      "nodeType": "VariableDeclaration",
                                                      "scope": 51520,
                                                      "src": "6458:10:50",
                                                      "stateVariable": false,
                                                      "storageLocation": "default",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                      },
                                                      "typeName": {
                                                        "id": 51483,
                                                        "name": "bytes32",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6458:7:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes32",
                                                          "typeString": "bytes32"
                                                        }
                                                      },
                                                      "visibility": "internal"
                                                    }
                                                  ],
                                                  "id": 51494,
                                                  "initialValue": {
                                                    "arguments": [
                                                      {
                                                        "id": 51487,
                                                        "name": "_signature",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51465,
                                                        "src": "6483:10:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes_memory_ptr",
                                                          "typeString": "bytes memory"
                                                        }
                                                      },
                                                      {
                                                        "components": [
                                                          {
                                                            "id": 51489,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6496:7:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_bytes32_$",
                                                              "typeString": "type(bytes32)"
                                                            },
                                                            "typeName": {
                                                              "id": 51488,
                                                              "name": "bytes32",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "6496:7:50",
                                                              "typeDescriptions": {}
                                                            }
                                                          },
                                                          {
                                                            "id": 51491,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "6505:7:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_bytes32_$",
                                                              "typeString": "type(bytes32)"
                                                            },
                                                            "typeName": {
                                                              "id": 51490,
                                                              "name": "bytes32",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "6505:7:50",
                                                              "typeDescriptions": {}
                                                            }
                                                          }
                                                        ],
                                                        "id": 51492,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "6495:18:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$",
                                                          "typeString": "tuple(type(bytes32),type(bytes32))"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_bytes_memory_ptr",
                                                          "typeString": "bytes memory"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes32_$_$",
                                                          "typeString": "tuple(type(bytes32),type(bytes32))"
                                                        }
                                                      ],
                                                      "expression": {
                                                        "id": 51485,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -1,
                                                        "src": "6472:3:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_magic_abi",
                                                          "typeString": "abi"
                                                        }
                                                      },
                                                      "id": 51486,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "memberLocation": "6476:6:50",
                                                      "memberName": "decode",
                                                      "nodeType": "MemberAccess",
                                                      "src": "6472:10:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                        "typeString": "function () pure"
                                                      }
                                                    },
                                                    "id": 51493,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6472:42:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$",
                                                      "typeString": "tuple(bytes32,bytes32)"
                                                    }
                                                  },
                                                  "nodeType": "VariableDeclarationStatement",
                                                  "src": "6445:69:50"
                                                },
                                                {
                                                  "assignments": [51496],
                                                  "declarations": [
                                                    {
                                                      "constant": false,
                                                      "id": 51496,
                                                      "mutability": "mutable",
                                                      "name": "_v",
                                                      "nameLocation": "6542:2:50",
                                                      "nodeType": "VariableDeclaration",
                                                      "scope": 51520,
                                                      "src": "6536:8:50",
                                                      "stateVariable": false,
                                                      "storageLocation": "default",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint8",
                                                        "typeString": "uint8"
                                                      },
                                                      "typeName": {
                                                        "id": 51495,
                                                        "name": "uint8",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6536:5:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint8",
                                                          "typeString": "uint8"
                                                        }
                                                      },
                                                      "visibility": "internal"
                                                    }
                                                  ],
                                                  "id": 51503,
                                                  "initialValue": {
                                                    "arguments": [
                                                      {
                                                        "baseExpression": {
                                                          "id": 51499,
                                                          "name": "_signature",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51465,
                                                          "src": "6553:10:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                          }
                                                        },
                                                        "id": 51501,
                                                        "indexExpression": {
                                                          "hexValue": "3634",
                                                          "id": 51500,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "6564:2:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_64_by_1",
                                                            "typeString": "int_const 64"
                                                          },
                                                          "value": "64"
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6553:14:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes1",
                                                          "typeString": "bytes1"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_bytes1",
                                                          "typeString": "bytes1"
                                                        }
                                                      ],
                                                      "id": 51498,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "6547:5:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint8_$",
                                                        "typeString": "type(uint8)"
                                                      },
                                                      "typeName": {
                                                        "id": 51497,
                                                        "name": "uint8",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "6547:5:50",
                                                        "typeDescriptions": {}
                                                      }
                                                    },
                                                    "id": 51502,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6547:21:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint8",
                                                      "typeString": "uint8"
                                                    }
                                                  },
                                                  "nodeType": "VariableDeclarationStatement",
                                                  "src": "6536:32:50"
                                                },
                                                {
                                                  "expression": {
                                                    "arguments": [
                                                      {
                                                        "expression": {
                                                          "id": 51507,
                                                          "name": "msg",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": -15,
                                                          "src": "6604:3:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                          }
                                                        },
                                                        "id": 51508,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberLocation": "6608:6:50",
                                                        "memberName": "sender",
                                                        "nodeType": "MemberAccess",
                                                        "src": "6604:10:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "id": 51511,
                                                            "name": "this",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": -28,
                                                            "src": "6624:4:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                              "typeString": "contract VaultRouter"
                                                            }
                                                          }
                                                        ],
                                                        "expression": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                              "typeString": "contract VaultRouter"
                                                            }
                                                          ],
                                                          "id": 51510,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "6616:7:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                          },
                                                          "typeName": {
                                                            "id": 51509,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "6616:7:50",
                                                            "typeDescriptions": {}
                                                          }
                                                        },
                                                        "id": 51512,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "typeConversion",
                                                        "lValueRequested": false,
                                                        "nameLocations": [],
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "6616:13:50",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      },
                                                      {
                                                        "id": 51513,
                                                        "name": "_amount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51461,
                                                        "src": "6631:7:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      {
                                                        "id": 51514,
                                                        "name": "_deadline",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51463,
                                                        "src": "6640:9:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      {
                                                        "id": 51515,
                                                        "name": "_v",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51496,
                                                        "src": "6651:2:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint8",
                                                          "typeString": "uint8"
                                                        }
                                                      },
                                                      {
                                                        "id": 51516,
                                                        "name": "_r",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51482,
                                                        "src": "6655:2:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes32",
                                                          "typeString": "bytes32"
                                                        }
                                                      },
                                                      {
                                                        "id": 51517,
                                                        "name": "_s",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51484,
                                                        "src": "6659:2:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes32",
                                                          "typeString": "bytes32"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint8",
                                                          "typeString": "uint8"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_bytes32",
                                                          "typeString": "bytes32"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_bytes32",
                                                          "typeString": "bytes32"
                                                        }
                                                      ],
                                                      "expression": {
                                                        "id": 51504,
                                                        "name": "_token",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51459,
                                                        "src": "6590:6:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                          "typeString": "contract ERC20Token"
                                                        }
                                                      },
                                                      "id": 51506,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "memberLocation": "6597:6:50",
                                                      "memberName": "permit",
                                                      "nodeType": "MemberAccess",
                                                      "referencedDeclaration": 45260,
                                                      "src": "6590:13:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                                                        "typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                                                      }
                                                    },
                                                    "id": 51518,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "6590:72:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$__$",
                                                      "typeString": "tuple()"
                                                    }
                                                  },
                                                  "id": 51519,
                                                  "nodeType": "ExpressionStatement",
                                                  "src": "6590:72:50"
                                                }
                                              ]
                                            }
                                          },
                                          "id": 51575,
                                          "nodeType": "IfStatement",
                                          "src": "5688:1422:50",
                                          "trueBody": {
                                            "id": 51443,
                                            "nodeType": "Block",
                                            "src": "5743:352:50",
                                            "statements": [
                                              {
                                                "expression": {
                                                  "arguments": [
                                                    {
                                                      "baseExpression": {
                                                        "id": 51408,
                                                        "name": "_encodedParameters",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51000,
                                                        "src": "5792:18:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                          "typeString": "bytes calldata[] calldata"
                                                        }
                                                      },
                                                      "id": 51410,
                                                      "indexExpression": {
                                                        "id": 51409,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51016,
                                                        "src": "5811:1:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexAccess",
                                                      "src": "5792:21:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                      }
                                                    },
                                                    {
                                                      "hexValue": "3936",
                                                      "id": 51411,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "5815:2:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_96_by_1",
                                                        "typeString": "int_const 96"
                                                      },
                                                      "value": "96"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_rational_96_by_1",
                                                        "typeString": "int_const 96"
                                                      }
                                                    ],
                                                    "id": 51407,
                                                    "name": "_requireInputIsRightLength",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51634,
                                                    "src": "5765:26:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                                      "typeString": "function (bytes calldata,uint256) pure"
                                                    }
                                                  },
                                                  "id": 51412,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "nameLocations": [],
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "5765:53:50",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                  }
                                                },
                                                "id": 51413,
                                                "nodeType": "ExpressionStatement",
                                                "src": "5765:53:50"
                                              },
                                              {
                                                "assignments": [51416, 51419, 51421],
                                                "declarations": [
                                                  {
                                                    "constant": false,
                                                    "id": 51416,
                                                    "mutability": "mutable",
                                                    "name": "_vaultContract",
                                                    "nameLocation": "5847:14:50",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 51443,
                                                    "src": "5841:20:50",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_Vault_$48277",
                                                      "typeString": "contract Vault"
                                                    },
                                                    "typeName": {
                                                      "id": 51415,
                                                      "nodeType": "UserDefinedTypeName",
                                                      "pathNode": {
                                                        "id": 51414,
                                                        "name": "Vault",
                                                        "nameLocations": ["5841:5:50"],
                                                        "nodeType": "IdentifierPath",
                                                        "referencedDeclaration": 48277,
                                                        "src": "5841:5:50"
                                                      },
                                                      "referencedDeclaration": 48277,
                                                      "src": "5841:5:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_Vault_$48277",
                                                        "typeString": "contract Vault"
                                                      }
                                                    },
                                                    "visibility": "internal"
                                                  },
                                                  {
                                                    "constant": false,
                                                    "id": 51419,
                                                    "mutability": "mutable",
                                                    "name": "_collateralToken",
                                                    "nameLocation": "5869:16:50",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 51443,
                                                    "src": "5863:22:50",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                      "typeString": "contract ERC20Token"
                                                    },
                                                    "typeName": {
                                                      "id": 51418,
                                                      "nodeType": "UserDefinedTypeName",
                                                      "pathNode": {
                                                        "id": 51417,
                                                        "name": "ERC20",
                                                        "nameLocations": ["5863:5:50"],
                                                        "nodeType": "IdentifierPath",
                                                        "referencedDeclaration": 46441,
                                                        "src": "5863:5:50"
                                                      },
                                                      "referencedDeclaration": 46441,
                                                      "src": "5863:5:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                        "typeString": "contract ERC20Token"
                                                      }
                                                    },
                                                    "visibility": "internal"
                                                  },
                                                  {
                                                    "constant": false,
                                                    "id": 51421,
                                                    "mutability": "mutable",
                                                    "name": "_amount",
                                                    "nameLocation": "5895:7:50",
                                                    "nodeType": "VariableDeclaration",
                                                    "scope": 51443,
                                                    "src": "5887:15:50",
                                                    "stateVariable": false,
                                                    "storageLocation": "default",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    },
                                                    "typeName": {
                                                      "id": 51420,
                                                      "name": "uint256",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "5887:7:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "visibility": "internal"
                                                  }
                                                ],
                                                "id": 51433,
                                                "initialValue": {
                                                  "arguments": [
                                                    {
                                                      "baseExpression": {
                                                        "id": 51424,
                                                        "name": "_encodedParameters",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51000,
                                                        "src": "5941:18:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                          "typeString": "bytes calldata[] calldata"
                                                        }
                                                      },
                                                      "id": 51426,
                                                      "indexExpression": {
                                                        "id": 51425,
                                                        "name": "i",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 51016,
                                                        "src": "5960:1:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "IndexAccess",
                                                      "src": "5941:21:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                      }
                                                    },
                                                    {
                                                      "components": [
                                                        {
                                                          "id": 51427,
                                                          "name": "Vault",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 48277,
                                                          "src": "5965:5:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_Vault_$48277_$",
                                                            "typeString": "type(contract Vault)"
                                                          }
                                                        },
                                                        {
                                                          "id": 51428,
                                                          "name": "ERC20",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 46441,
                                                          "src": "5972:5:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_ERC20Token_$46441_$",
                                                            "typeString": "type(contract ERC20Token)"
                                                          }
                                                        },
                                                        {
                                                          "id": 51430,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "nodeType": "ElementaryTypeNameExpression",
                                                          "src": "5979:7:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_uint256_$",
                                                            "typeString": "type(uint256)"
                                                          },
                                                          "typeName": {
                                                            "id": 51429,
                                                            "name": "uint256",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "5979:7:50",
                                                            "typeDescriptions": {}
                                                          }
                                                        }
                                                      ],
                                                      "id": 51431,
                                                      "isConstant": false,
                                                      "isInlineArray": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "TupleExpression",
                                                      "src": "5964:23:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_uint256_$_$",
                                                        "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(uint256))"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                                        "typeString": "bytes calldata"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_uint256_$_$",
                                                        "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(uint256))"
                                                      }
                                                    ],
                                                    "expression": {
                                                      "id": 51422,
                                                      "name": "abi",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": -1,
                                                      "src": "5930:3:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_abi",
                                                        "typeString": "abi"
                                                      }
                                                    },
                                                    "id": 51423,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberLocation": "5934:6:50",
                                                    "memberName": "decode",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5930:10:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                      "typeString": "function () pure"
                                                    }
                                                  },
                                                  "id": 51432,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "nameLocations": [],
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "5930:58:50",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_contract$_Vault_$48277_$_t_contract$_ERC20Token_$46441_$_t_uint256_$",
                                                    "typeString": "tuple(contract Vault,contract ERC20Token,uint256)"
                                                  }
                                                },
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "5840:148:50"
                                              },
                                              {
                                                "expression": {
                                                  "arguments": [
                                                    {
                                                      "id": 51437,
                                                      "name": "_collateralToken",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51419,
                                                      "src": "6038:16:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                        "typeString": "contract ERC20Token"
                                                      }
                                                    },
                                                    {
                                                      "expression": {
                                                        "id": 51438,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "6056:3:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_magic_message",
                                                          "typeString": "msg"
                                                        }
                                                      },
                                                      "id": 51439,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "memberLocation": "6060:6:50",
                                                      "memberName": "sender",
                                                      "nodeType": "MemberAccess",
                                                      "src": "6056:10:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      }
                                                    },
                                                    {
                                                      "id": 51440,
                                                      "name": "_amount",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51421,
                                                      "src": "6068:7:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                        "typeString": "contract ERC20Token"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    ],
                                                    "expression": {
                                                      "id": 51434,
                                                      "name": "_vaultContract",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51416,
                                                      "src": "6010:14:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_Vault_$48277",
                                                        "typeString": "contract Vault"
                                                      }
                                                    },
                                                    "id": 51436,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberLocation": "6025:12:50",
                                                    "memberName": "burnCurrency",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 47577,
                                                    "src": "6010:27:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20Token_$46441_$_t_address_$_t_uint256_$returns$__$",
                                                      "typeString": "function (contract ERC20Token,address,uint256) external"
                                                    }
                                                  },
                                                  "id": 51441,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "nameLocations": [],
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "6010:66:50",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$__$",
                                                    "typeString": "tuple()"
                                                  }
                                                },
                                                "id": 51442,
                                                "nodeType": "ExpressionStatement",
                                                "src": "6010:66:50"
                                              }
                                            ]
                                          }
                                        },
                                        "id": 51576,
                                        "nodeType": "IfStatement",
                                        "src": "5247:1863:50",
                                        "trueBody": {
                                          "id": 51400,
                                          "nodeType": "Block",
                                          "src": "5302:380:50",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "baseExpression": {
                                                      "id": 51360,
                                                      "name": "_encodedParameters",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51000,
                                                      "src": "5351:18:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                        "typeString": "bytes calldata[] calldata"
                                                      }
                                                    },
                                                    "id": 51362,
                                                    "indexExpression": {
                                                      "id": 51361,
                                                      "name": "i",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51016,
                                                      "src": "5370:1:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "5351:21:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                                      "typeString": "bytes calldata"
                                                    }
                                                  },
                                                  {
                                                    "hexValue": "313238",
                                                    "id": 51363,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "5374:3:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_128_by_1",
                                                      "typeString": "int_const 128"
                                                    },
                                                    "value": "128"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                                      "typeString": "bytes calldata"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_rational_128_by_1",
                                                      "typeString": "int_const 128"
                                                    }
                                                  ],
                                                  "id": 51359,
                                                  "name": "_requireInputIsRightLength",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51634,
                                                  "src": "5324:26:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                                    "typeString": "function (bytes calldata,uint256) pure"
                                                  }
                                                },
                                                "id": 51364,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5324:54:50",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$__$",
                                                  "typeString": "tuple()"
                                                }
                                              },
                                              "id": 51365,
                                              "nodeType": "ExpressionStatement",
                                              "src": "5324:54:50"
                                            },
                                            {
                                              "assignments": [51368, 51371, 51373, 51375],
                                              "declarations": [
                                                {
                                                  "constant": false,
                                                  "id": 51368,
                                                  "mutability": "mutable",
                                                  "name": "_vaultContract",
                                                  "nameLocation": "5407:14:50",
                                                  "nodeType": "VariableDeclaration",
                                                  "scope": 51400,
                                                  "src": "5401:20:50",
                                                  "stateVariable": false,
                                                  "storageLocation": "default",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_Vault_$48277",
                                                    "typeString": "contract Vault"
                                                  },
                                                  "typeName": {
                                                    "id": 51367,
                                                    "nodeType": "UserDefinedTypeName",
                                                    "pathNode": {
                                                      "id": 51366,
                                                      "name": "Vault",
                                                      "nameLocations": ["5401:5:50"],
                                                      "nodeType": "IdentifierPath",
                                                      "referencedDeclaration": 48277,
                                                      "src": "5401:5:50"
                                                    },
                                                    "referencedDeclaration": 48277,
                                                    "src": "5401:5:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_Vault_$48277",
                                                      "typeString": "contract Vault"
                                                    }
                                                  },
                                                  "visibility": "internal"
                                                },
                                                {
                                                  "constant": false,
                                                  "id": 51371,
                                                  "mutability": "mutable",
                                                  "name": "_collateralToken",
                                                  "nameLocation": "5429:16:50",
                                                  "nodeType": "VariableDeclaration",
                                                  "scope": 51400,
                                                  "src": "5423:22:50",
                                                  "stateVariable": false,
                                                  "storageLocation": "default",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                    "typeString": "contract ERC20Token"
                                                  },
                                                  "typeName": {
                                                    "id": 51370,
                                                    "nodeType": "UserDefinedTypeName",
                                                    "pathNode": {
                                                      "id": 51369,
                                                      "name": "ERC20",
                                                      "nameLocations": ["5423:5:50"],
                                                      "nodeType": "IdentifierPath",
                                                      "referencedDeclaration": 46441,
                                                      "src": "5423:5:50"
                                                    },
                                                    "referencedDeclaration": 46441,
                                                    "src": "5423:5:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                      "typeString": "contract ERC20Token"
                                                    }
                                                  },
                                                  "visibility": "internal"
                                                },
                                                {
                                                  "constant": false,
                                                  "id": 51373,
                                                  "mutability": "mutable",
                                                  "name": "_to",
                                                  "nameLocation": "5455:3:50",
                                                  "nodeType": "VariableDeclaration",
                                                  "scope": 51400,
                                                  "src": "5447:11:50",
                                                  "stateVariable": false,
                                                  "storageLocation": "default",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  },
                                                  "typeName": {
                                                    "id": 51372,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "5447:7:50",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  "visibility": "internal"
                                                },
                                                {
                                                  "constant": false,
                                                  "id": 51375,
                                                  "mutability": "mutable",
                                                  "name": "_amount",
                                                  "nameLocation": "5468:7:50",
                                                  "nodeType": "VariableDeclaration",
                                                  "scope": 51400,
                                                  "src": "5460:15:50",
                                                  "stateVariable": false,
                                                  "storageLocation": "default",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "typeName": {
                                                    "id": 51374,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "5460:7:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "visibility": "internal"
                                                }
                                              ],
                                              "id": 51389,
                                              "initialValue": {
                                                "arguments": [
                                                  {
                                                    "baseExpression": {
                                                      "id": 51378,
                                                      "name": "_encodedParameters",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51000,
                                                      "src": "5514:18:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                        "typeString": "bytes calldata[] calldata"
                                                      }
                                                    },
                                                    "id": 51380,
                                                    "indexExpression": {
                                                      "id": 51379,
                                                      "name": "i",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51016,
                                                      "src": "5533:1:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "5514:21:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                                      "typeString": "bytes calldata"
                                                    }
                                                  },
                                                  {
                                                    "components": [
                                                      {
                                                        "id": 51381,
                                                        "name": "Vault",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 48277,
                                                        "src": "5538:5:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_contract$_Vault_$48277_$",
                                                          "typeString": "type(contract Vault)"
                                                        }
                                                      },
                                                      {
                                                        "id": 51382,
                                                        "name": "ERC20",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 46441,
                                                        "src": "5545:5:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_contract$_ERC20Token_$46441_$",
                                                          "typeString": "type(contract ERC20Token)"
                                                        }
                                                      },
                                                      {
                                                        "id": 51384,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "5552:7:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_address_$",
                                                          "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                          "id": 51383,
                                                          "name": "address",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "5552:7:50",
                                                          "typeDescriptions": {}
                                                        }
                                                      },
                                                      {
                                                        "id": 51386,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "5561:7:50",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_type$_t_uint256_$",
                                                          "typeString": "type(uint256)"
                                                        },
                                                        "typeName": {
                                                          "id": 51385,
                                                          "name": "uint256",
                                                          "nodeType": "ElementaryTypeName",
                                                          "src": "5561:7:50",
                                                          "typeDescriptions": {}
                                                        }
                                                      }
                                                    ],
                                                    "id": 51387,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "5537:32:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                      "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(address),type(uint256))"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                                      "typeString": "bytes calldata"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                      "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(address),type(uint256))"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 51376,
                                                    "name": "abi",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -1,
                                                    "src": "5503:3:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_abi",
                                                      "typeString": "abi"
                                                    }
                                                  },
                                                  "id": 51377,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "memberLocation": "5507:6:50",
                                                  "memberName": "decode",
                                                  "nodeType": "MemberAccess",
                                                  "src": "5503:10:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                    "typeString": "function () pure"
                                                  }
                                                },
                                                "id": 51388,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5503:67:50",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$_t_contract$_Vault_$48277_$_t_contract$_ERC20Token_$46441_$_t_address_payable_$_t_uint256_$",
                                                  "typeString": "tuple(contract Vault,contract ERC20Token,address payable,uint256)"
                                                }
                                              },
                                              "nodeType": "VariableDeclarationStatement",
                                              "src": "5400:170:50"
                                            },
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "id": 51393,
                                                    "name": "_collateralToken",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51371,
                                                    "src": "5620:16:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                      "typeString": "contract ERC20Token"
                                                    }
                                                  },
                                                  {
                                                    "expression": {
                                                      "id": 51394,
                                                      "name": "msg",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": -15,
                                                      "src": "5638:3:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_magic_message",
                                                        "typeString": "msg"
                                                      }
                                                    },
                                                    "id": 51395,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberLocation": "5642:6:50",
                                                    "memberName": "sender",
                                                    "nodeType": "MemberAccess",
                                                    "src": "5638:10:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "id": 51396,
                                                    "name": "_to",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51373,
                                                    "src": "5650:3:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "id": 51397,
                                                    "name": "_amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51375,
                                                    "src": "5655:7:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                      "typeString": "contract ERC20Token"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 51390,
                                                    "name": "_vaultContract",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51368,
                                                    "src": "5592:14:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_Vault_$48277",
                                                      "typeString": "contract Vault"
                                                    }
                                                  },
                                                  "id": 51392,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "5607:12:50",
                                                  "memberName": "mintCurrency",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 47532,
                                                  "src": "5592:27:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20Token_$46441_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                    "typeString": "function (contract ERC20Token,address,address,uint256) external"
                                                  }
                                                },
                                                "id": 51398,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5592:71:50",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$__$",
                                                  "typeString": "tuple()"
                                                }
                                              },
                                              "id": 51399,
                                              "nodeType": "ExpressionStatement",
                                              "src": "5592:71:50"
                                            }
                                          ]
                                        }
                                      },
                                      "id": 51577,
                                      "nodeType": "IfStatement",
                                      "src": "4794:2316:50",
                                      "trueBody": {
                                        "id": 51352,
                                        "nodeType": "Block",
                                        "src": "4855:386:50",
                                        "statements": [
                                          {
                                            "expression": {
                                              "arguments": [
                                                {
                                                  "baseExpression": {
                                                    "id": 51312,
                                                    "name": "_encodedParameters",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51000,
                                                    "src": "4904:18:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                      "typeString": "bytes calldata[] calldata"
                                                    }
                                                  },
                                                  "id": 51314,
                                                  "indexExpression": {
                                                    "id": 51313,
                                                    "name": "i",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51016,
                                                    "src": "4923:1:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "IndexAccess",
                                                  "src": "4904:21:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                  }
                                                },
                                                {
                                                  "hexValue": "313238",
                                                  "id": 51315,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "4927:3:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_128_by_1",
                                                    "typeString": "int_const 128"
                                                  },
                                                  "value": "128"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_rational_128_by_1",
                                                    "typeString": "int_const 128"
                                                  }
                                                ],
                                                "id": 51311,
                                                "name": "_requireInputIsRightLength",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51634,
                                                "src": "4877:26:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                                  "typeString": "function (bytes calldata,uint256) pure"
                                                }
                                              },
                                              "id": 51316,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "4877:54:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$__$",
                                                "typeString": "tuple()"
                                              }
                                            },
                                            "id": 51317,
                                            "nodeType": "ExpressionStatement",
                                            "src": "4877:54:50"
                                          },
                                          {
                                            "assignments": [51320, 51323, 51325, 51327],
                                            "declarations": [
                                              {
                                                "constant": false,
                                                "id": 51320,
                                                "mutability": "mutable",
                                                "name": "_vaultContract",
                                                "nameLocation": "4960:14:50",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 51352,
                                                "src": "4954:20:50",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_Vault_$48277",
                                                  "typeString": "contract Vault"
                                                },
                                                "typeName": {
                                                  "id": 51319,
                                                  "nodeType": "UserDefinedTypeName",
                                                  "pathNode": {
                                                    "id": 51318,
                                                    "name": "Vault",
                                                    "nameLocations": ["4954:5:50"],
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 48277,
                                                    "src": "4954:5:50"
                                                  },
                                                  "referencedDeclaration": 48277,
                                                  "src": "4954:5:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_Vault_$48277",
                                                    "typeString": "contract Vault"
                                                  }
                                                },
                                                "visibility": "internal"
                                              },
                                              {
                                                "constant": false,
                                                "id": 51323,
                                                "mutability": "mutable",
                                                "name": "_collateralToken",
                                                "nameLocation": "4982:16:50",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 51352,
                                                "src": "4976:22:50",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                  "typeString": "contract ERC20Token"
                                                },
                                                "typeName": {
                                                  "id": 51322,
                                                  "nodeType": "UserDefinedTypeName",
                                                  "pathNode": {
                                                    "id": 51321,
                                                    "name": "ERC20",
                                                    "nameLocations": ["4976:5:50"],
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 46441,
                                                    "src": "4976:5:50"
                                                  },
                                                  "referencedDeclaration": 46441,
                                                  "src": "4976:5:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                    "typeString": "contract ERC20Token"
                                                  }
                                                },
                                                "visibility": "internal"
                                              },
                                              {
                                                "constant": false,
                                                "id": 51325,
                                                "mutability": "mutable",
                                                "name": "_to",
                                                "nameLocation": "5008:3:50",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 51352,
                                                "src": "5000:11:50",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                "typeName": {
                                                  "id": 51324,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "5000:7:50",
                                                  "stateMutability": "nonpayable",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "visibility": "internal"
                                              },
                                              {
                                                "constant": false,
                                                "id": 51327,
                                                "mutability": "mutable",
                                                "name": "_amount",
                                                "nameLocation": "5021:7:50",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 51352,
                                                "src": "5013:15:50",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "typeName": {
                                                  "id": 51326,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "5013:7:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "visibility": "internal"
                                              }
                                            ],
                                            "id": 51341,
                                            "initialValue": {
                                              "arguments": [
                                                {
                                                  "baseExpression": {
                                                    "id": 51330,
                                                    "name": "_encodedParameters",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51000,
                                                    "src": "5067:18:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                      "typeString": "bytes calldata[] calldata"
                                                    }
                                                  },
                                                  "id": 51332,
                                                  "indexExpression": {
                                                    "id": 51331,
                                                    "name": "i",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51016,
                                                    "src": "5086:1:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "IndexAccess",
                                                  "src": "5067:21:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                  }
                                                },
                                                {
                                                  "components": [
                                                    {
                                                      "id": 51333,
                                                      "name": "Vault",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 48277,
                                                      "src": "5091:5:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_Vault_$48277_$",
                                                        "typeString": "type(contract Vault)"
                                                      }
                                                    },
                                                    {
                                                      "id": 51334,
                                                      "name": "ERC20",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 46441,
                                                      "src": "5098:5:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_contract$_ERC20Token_$46441_$",
                                                        "typeString": "type(contract ERC20Token)"
                                                      }
                                                    },
                                                    {
                                                      "id": 51336,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "5105:7:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                      },
                                                      "typeName": {
                                                        "id": 51335,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "5105:7:50",
                                                        "typeDescriptions": {}
                                                      }
                                                    },
                                                    {
                                                      "id": 51338,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "5114:7:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                        "typeString": "type(uint256)"
                                                      },
                                                      "typeName": {
                                                        "id": 51337,
                                                        "name": "uint256",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "5114:7:50",
                                                        "typeDescriptions": {}
                                                      }
                                                    }
                                                  ],
                                                  "id": 51339,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "5090:32:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                    "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(address),type(uint256))"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                    "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(address),type(uint256))"
                                                  }
                                                ],
                                                "expression": {
                                                  "id": 51328,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -1,
                                                  "src": "5056:3:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 51329,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberLocation": "5060:6:50",
                                                "memberName": "decode",
                                                "nodeType": "MemberAccess",
                                                "src": "5056:10:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                  "typeString": "function () pure"
                                                }
                                              },
                                              "id": 51340,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "5056:67:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_contract$_Vault_$48277_$_t_contract$_ERC20Token_$46441_$_t_address_payable_$_t_uint256_$",
                                                "typeString": "tuple(contract Vault,contract ERC20Token,address payable,uint256)"
                                              }
                                            },
                                            "nodeType": "VariableDeclarationStatement",
                                            "src": "4953:170:50"
                                          },
                                          {
                                            "expression": {
                                              "arguments": [
                                                {
                                                  "id": 51345,
                                                  "name": "_collateralToken",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51323,
                                                  "src": "5179:16:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                    "typeString": "contract ERC20Token"
                                                  }
                                                },
                                                {
                                                  "expression": {
                                                    "id": 51346,
                                                    "name": "msg",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -15,
                                                    "src": "5197:3:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_magic_message",
                                                      "typeString": "msg"
                                                    }
                                                  },
                                                  "id": 51347,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "5201:6:50",
                                                  "memberName": "sender",
                                                  "nodeType": "MemberAccess",
                                                  "src": "5197:10:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "id": 51348,
                                                  "name": "_to",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51325,
                                                  "src": "5209:3:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "id": 51349,
                                                  "name": "_amount",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51327,
                                                  "src": "5214:7:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                    "typeString": "contract ERC20Token"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "expression": {
                                                  "id": 51342,
                                                  "name": "_vaultContract",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51320,
                                                  "src": "5145:14:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_Vault_$48277",
                                                    "typeString": "contract Vault"
                                                  }
                                                },
                                                "id": 51344,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberLocation": "5160:18:50",
                                                "memberName": "withdrawCollateral",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 47425,
                                                "src": "5145:33:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20Token_$46441_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                  "typeString": "function (contract ERC20Token,address,address,uint256) external"
                                                }
                                              },
                                              "id": 51350,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "5145:77:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$__$",
                                                "typeString": "tuple()"
                                              }
                                            },
                                            "id": 51351,
                                            "nodeType": "ExpressionStatement",
                                            "src": "5145:77:50"
                                          }
                                        ]
                                      }
                                    },
                                    "id": 51578,
                                    "nodeType": "IfStatement",
                                    "src": "4371:2739:50",
                                    "trueBody": {
                                      "id": 51304,
                                      "nodeType": "Block",
                                      "src": "4431:357:50",
                                      "statements": [
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "baseExpression": {
                                                  "id": 51269,
                                                  "name": "_encodedParameters",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51000,
                                                  "src": "4480:18:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                    "typeString": "bytes calldata[] calldata"
                                                  }
                                                },
                                                "id": 51271,
                                                "indexExpression": {
                                                  "id": 51270,
                                                  "name": "i",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51016,
                                                  "src": "4499:1:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4480:21:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                                  "typeString": "bytes calldata"
                                                }
                                              },
                                              {
                                                "hexValue": "3936",
                                                "id": 51272,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "4503:2:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_96_by_1",
                                                  "typeString": "int_const 96"
                                                },
                                                "value": "96"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                                  "typeString": "bytes calldata"
                                                },
                                                {
                                                  "typeIdentifier": "t_rational_96_by_1",
                                                  "typeString": "int_const 96"
                                                }
                                              ],
                                              "id": 51268,
                                              "name": "_requireInputIsRightLength",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51634,
                                              "src": "4453:26:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                                "typeString": "function (bytes calldata,uint256) pure"
                                              }
                                            },
                                            "id": 51273,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4453:53:50",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$__$",
                                              "typeString": "tuple()"
                                            }
                                          },
                                          "id": 51274,
                                          "nodeType": "ExpressionStatement",
                                          "src": "4453:53:50"
                                        },
                                        {
                                          "assignments": [51277, 51280, 51282],
                                          "declarations": [
                                            {
                                              "constant": false,
                                              "id": 51277,
                                              "mutability": "mutable",
                                              "name": "_vaultContract",
                                              "nameLocation": "4535:14:50",
                                              "nodeType": "VariableDeclaration",
                                              "scope": 51304,
                                              "src": "4529:20:50",
                                              "stateVariable": false,
                                              "storageLocation": "default",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_Vault_$48277",
                                                "typeString": "contract Vault"
                                              },
                                              "typeName": {
                                                "id": 51276,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                  "id": 51275,
                                                  "name": "Vault",
                                                  "nameLocations": ["4529:5:50"],
                                                  "nodeType": "IdentifierPath",
                                                  "referencedDeclaration": 48277,
                                                  "src": "4529:5:50"
                                                },
                                                "referencedDeclaration": 48277,
                                                "src": "4529:5:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_Vault_$48277",
                                                  "typeString": "contract Vault"
                                                }
                                              },
                                              "visibility": "internal"
                                            },
                                            {
                                              "constant": false,
                                              "id": 51280,
                                              "mutability": "mutable",
                                              "name": "_collateralToken",
                                              "nameLocation": "4557:16:50",
                                              "nodeType": "VariableDeclaration",
                                              "scope": 51304,
                                              "src": "4551:22:50",
                                              "stateVariable": false,
                                              "storageLocation": "default",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                "typeString": "contract ERC20Token"
                                              },
                                              "typeName": {
                                                "id": 51279,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                  "id": 51278,
                                                  "name": "ERC20",
                                                  "nameLocations": ["4551:5:50"],
                                                  "nodeType": "IdentifierPath",
                                                  "referencedDeclaration": 46441,
                                                  "src": "4551:5:50"
                                                },
                                                "referencedDeclaration": 46441,
                                                "src": "4551:5:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                  "typeString": "contract ERC20Token"
                                                }
                                              },
                                              "visibility": "internal"
                                            },
                                            {
                                              "constant": false,
                                              "id": 51282,
                                              "mutability": "mutable",
                                              "name": "_amount",
                                              "nameLocation": "4583:7:50",
                                              "nodeType": "VariableDeclaration",
                                              "scope": 51304,
                                              "src": "4575:15:50",
                                              "stateVariable": false,
                                              "storageLocation": "default",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "typeName": {
                                                "id": 51281,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4575:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "visibility": "internal"
                                            }
                                          ],
                                          "id": 51294,
                                          "initialValue": {
                                            "arguments": [
                                              {
                                                "baseExpression": {
                                                  "id": 51285,
                                                  "name": "_encodedParameters",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51000,
                                                  "src": "4629:18:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                    "typeString": "bytes calldata[] calldata"
                                                  }
                                                },
                                                "id": 51287,
                                                "indexExpression": {
                                                  "id": 51286,
                                                  "name": "i",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51016,
                                                  "src": "4648:1:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "4629:21:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                                  "typeString": "bytes calldata"
                                                }
                                              },
                                              {
                                                "components": [
                                                  {
                                                    "id": 51288,
                                                    "name": "Vault",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 48277,
                                                    "src": "4653:5:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_Vault_$48277_$",
                                                      "typeString": "type(contract Vault)"
                                                    }
                                                  },
                                                  {
                                                    "id": 51289,
                                                    "name": "ERC20",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 46441,
                                                    "src": "4660:5:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_ERC20Token_$46441_$",
                                                      "typeString": "type(contract ERC20Token)"
                                                    }
                                                  },
                                                  {
                                                    "id": 51291,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "4667:7:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_uint256_$",
                                                      "typeString": "type(uint256)"
                                                    },
                                                    "typeName": {
                                                      "id": 51290,
                                                      "name": "uint256",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "4667:7:50",
                                                      "typeDescriptions": {}
                                                    }
                                                  }
                                                ],
                                                "id": 51292,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "4652:23:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_uint256_$_$",
                                                  "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(uint256))"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                                  "typeString": "bytes calldata"
                                                },
                                                {
                                                  "typeIdentifier": "t_tuple$_t_type$_t_contract$_Vault_$48277_$_$_t_type$_t_contract$_ERC20Token_$46441_$_$_t_type$_t_uint256_$_$",
                                                  "typeString": "tuple(type(contract Vault),type(contract ERC20Token),type(uint256))"
                                                }
                                              ],
                                              "expression": {
                                                "id": 51283,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -1,
                                                "src": "4618:3:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_abi",
                                                  "typeString": "abi"
                                                }
                                              },
                                              "id": 51284,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberLocation": "4622:6:50",
                                              "memberName": "decode",
                                              "nodeType": "MemberAccess",
                                              "src": "4618:10:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                                "typeString": "function () pure"
                                              }
                                            },
                                            "id": 51293,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4618:58:50",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$_t_contract$_Vault_$48277_$_t_contract$_ERC20Token_$46441_$_t_uint256_$",
                                              "typeString": "tuple(contract Vault,contract ERC20Token,uint256)"
                                            }
                                          },
                                          "nodeType": "VariableDeclarationStatement",
                                          "src": "4528:148:50"
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "id": 51298,
                                                "name": "_collateralToken",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51280,
                                                "src": "4731:16:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                  "typeString": "contract ERC20Token"
                                                }
                                              },
                                              {
                                                "expression": {
                                                  "id": 51299,
                                                  "name": "msg",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -15,
                                                  "src": "4749:3:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_message",
                                                    "typeString": "msg"
                                                  }
                                                },
                                                "id": 51300,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberLocation": "4753:6:50",
                                                "memberName": "sender",
                                                "nodeType": "MemberAccess",
                                                "src": "4749:10:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 51301,
                                                "name": "_amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51282,
                                                "src": "4761:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_ERC20Token_$46441",
                                                  "typeString": "contract ERC20Token"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "id": 51295,
                                                "name": "_vaultContract",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51277,
                                                "src": "4698:14:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_Vault_$48277",
                                                  "typeString": "contract Vault"
                                                }
                                              },
                                              "id": 51297,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "4713:17:50",
                                              "memberName": "depositCollateral",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 47366,
                                              "src": "4698:32:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20Token_$46441_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (contract ERC20Token,address,uint256) external"
                                              }
                                            },
                                            "id": 51302,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4698:71:50",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$__$",
                                              "typeString": "tuple()"
                                            }
                                          },
                                          "id": 51303,
                                          "nodeType": "ExpressionStatement",
                                          "src": "4698:71:50"
                                        }
                                      ]
                                    }
                                  },
                                  "id": 51579,
                                  "nodeType": "IfStatement",
                                  "src": "3918:3192:50",
                                  "trueBody": {
                                    "id": 51261,
                                    "nodeType": "Block",
                                    "src": "3981:384:50",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "baseExpression": {
                                                "id": 51216,
                                                "name": "_encodedParameters",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51000,
                                                "src": "4030:18:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                  "typeString": "bytes calldata[] calldata"
                                                }
                                              },
                                              "id": 51218,
                                              "indexExpression": {
                                                "id": 51217,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51016,
                                                "src": "4049:1:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "4030:21:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                "typeString": "bytes calldata"
                                              }
                                            },
                                            {
                                              "hexValue": "3634",
                                              "id": 51219,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "4053:2:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_64_by_1",
                                                "typeString": "int_const 64"
                                              },
                                              "value": "64"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                "typeString": "bytes calldata"
                                              },
                                              {
                                                "typeIdentifier": "t_rational_64_by_1",
                                                "typeString": "int_const 64"
                                              }
                                            ],
                                            "id": 51215,
                                            "name": "_requireInputIsRightLength",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 51634,
                                            "src": "4003:26:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                              "typeString": "function (bytes calldata,uint256) pure"
                                            }
                                          },
                                          "id": 51220,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "4003:53:50",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 51221,
                                        "nodeType": "ExpressionStatement",
                                        "src": "4003:53:50"
                                      },
                                      {
                                        "assignments": [51223, 51225],
                                        "declarations": [
                                          {
                                            "constant": false,
                                            "id": 51223,
                                            "mutability": "mutable",
                                            "name": "_token",
                                            "nameLocation": "4087:6:50",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 51261,
                                            "src": "4079:14:50",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            "typeName": {
                                              "id": 51222,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "4079:7:50",
                                              "stateMutability": "nonpayable",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "visibility": "internal"
                                          },
                                          {
                                            "constant": false,
                                            "id": 51225,
                                            "mutability": "mutable",
                                            "name": "_amount",
                                            "nameLocation": "4103:7:50",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 51261,
                                            "src": "4095:15:50",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "typeName": {
                                              "id": 51224,
                                              "name": "uint256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "4095:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "visibility": "internal"
                                          }
                                        ],
                                        "id": 51237,
                                        "initialValue": {
                                          "arguments": [
                                            {
                                              "baseExpression": {
                                                "id": 51228,
                                                "name": "_encodedParameters",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51000,
                                                "src": "4125:18:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                  "typeString": "bytes calldata[] calldata"
                                                }
                                              },
                                              "id": 51230,
                                              "indexExpression": {
                                                "id": 51229,
                                                "name": "i",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51016,
                                                "src": "4144:1:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "4125:21:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                "typeString": "bytes calldata"
                                              }
                                            },
                                            {
                                              "components": [
                                                {
                                                  "id": 51232,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "4149:7:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                  },
                                                  "typeName": {
                                                    "id": 51231,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "4149:7:50",
                                                    "typeDescriptions": {}
                                                  }
                                                },
                                                {
                                                  "id": 51234,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "4158:7:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                  },
                                                  "typeName": {
                                                    "id": 51233,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "4158:7:50",
                                                    "typeDescriptions": {}
                                                  }
                                                }
                                              ],
                                              "id": 51235,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "4148:18:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                "typeString": "tuple(type(address),type(uint256))"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes_calldata_ptr",
                                                "typeString": "bytes calldata"
                                              },
                                              {
                                                "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                                                "typeString": "tuple(type(address),type(uint256))"
                                              }
                                            ],
                                            "expression": {
                                              "id": 51226,
                                              "name": "abi",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -1,
                                              "src": "4114:3:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_abi",
                                                "typeString": "abi"
                                              }
                                            },
                                            "id": 51227,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "4118:6:50",
                                            "memberName": "decode",
                                            "nodeType": "MemberAccess",
                                            "src": "4114:10:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 51236,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "4114:53:50",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_payable_$_t_uint256_$",
                                            "typeString": "tuple(address payable,uint256)"
                                          }
                                        },
                                        "nodeType": "VariableDeclarationStatement",
                                        "src": "4078:89:50"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "expression": {
                                                "id": 51241,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "4235:3:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_message",
                                                  "typeString": "msg"
                                                }
                                              },
                                              "id": 51242,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "4239:6:50",
                                              "memberName": "sender",
                                              "nodeType": "MemberAccess",
                                              "src": "4235:10:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "id": 51245,
                                                  "name": "this",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -28,
                                                  "src": "4255:4:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                    "typeString": "contract VaultRouter"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                    "typeString": "contract VaultRouter"
                                                  }
                                                ],
                                                "id": 51244,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "4247:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 51243,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "4247:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 51246,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "4247:13:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "id": 51250,
                                                      "name": "_amount",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 51225,
                                                      "src": "4288:7:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    {
                                                      "expression": {
                                                        "arguments": [
                                                          {
                                                            "id": 51253,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "nodeType": "ElementaryTypeNameExpression",
                                                            "src": "4302:7:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_type$_t_uint160_$",
                                                              "typeString": "type(uint160)"
                                                            },
                                                            "typeName": {
                                                              "id": 51252,
                                                              "name": "uint160",
                                                              "nodeType": "ElementaryTypeName",
                                                              "src": "4302:7:50",
                                                              "typeDescriptions": {}
                                                            }
                                                          }
                                                        ],
                                                        "expression": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_type$_t_uint160_$",
                                                              "typeString": "type(uint160)"
                                                            }
                                                          ],
                                                          "id": 51251,
                                                          "name": "type",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": -27,
                                                          "src": "4297:4:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                            "typeString": "function () pure"
                                                          }
                                                        },
                                                        "id": 51254,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "nameLocations": [],
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "4297:13:50",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_magic_meta_type_t_uint160",
                                                          "typeString": "type(uint160)"
                                                        }
                                                      },
                                                      "id": 51255,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "memberLocation": "4311:3:50",
                                                      "memberName": "max",
                                                      "nodeType": "MemberAccess",
                                                      "src": "4297:17:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint160",
                                                        "typeString": "uint160"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      {
                                                        "typeIdentifier": "t_uint160",
                                                        "typeString": "uint160"
                                                      }
                                                    ],
                                                    "id": 51249,
                                                    "name": "_ensureSafeToCast",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51653,
                                                    "src": "4270:17:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                  },
                                                  "id": 51256,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "functionCall",
                                                  "lValueRequested": false,
                                                  "nameLocations": [],
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "4270:45:50",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "id": 51248,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "4262:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint160_$",
                                                  "typeString": "type(uint160)"
                                                },
                                                "typeName": {
                                                  "id": 51247,
                                                  "name": "uint160",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "4262:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 51257,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "4262:54:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint160",
                                                "typeString": "uint160"
                                              }
                                            },
                                            {
                                              "id": 51258,
                                              "name": "_token",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51223,
                                              "src": "4318:6:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_uint160",
                                                "typeString": "uint160"
                                              },
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            ],
                                            "expression": {
                                              "id": 51238,
                                              "name": "permit2",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 50965,
                                              "src": "4189:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_IPermit2_$43696",
                                                "typeString": "contract IPermit2"
                                              }
                                            },
                                            "id": 51240,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "4197:12:50",
                                            "memberName": "transferFrom",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 43649,
                                            "src": "4189:20:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint160_$_t_address_$returns$__$",
                                              "typeString": "function (address,address,uint160,address) external"
                                            }
                                          },
                                          "id": 51259,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "4189:157:50",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 51260,
                                        "nodeType": "ExpressionStatement",
                                        "src": "4189:157:50"
                                      }
                                    ]
                                  }
                                },
                                "id": 51580,
                                "nodeType": "IfStatement",
                                "src": "2609:4501:50",
                                "trueBody": {
                                  "id": 51208,
                                  "nodeType": "Block",
                                  "src": "2666:1246:50",
                                  "statements": [
                                    {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "baseExpression": {
                                              "id": 51117,
                                              "name": "_encodedParameters",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51000,
                                              "src": "2715:18:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                "typeString": "bytes calldata[] calldata"
                                              }
                                            },
                                            "id": 51119,
                                            "indexExpression": {
                                              "id": 51118,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51016,
                                              "src": "2734:1:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "2715:21:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_calldata_ptr",
                                              "typeString": "bytes calldata"
                                            }
                                          },
                                          {
                                            "hexValue": "333230",
                                            "id": 51120,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2738:3:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_320_by_1",
                                              "typeString": "int_const 320"
                                            },
                                            "value": "320"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_calldata_ptr",
                                              "typeString": "bytes calldata"
                                            },
                                            {
                                              "typeIdentifier": "t_rational_320_by_1",
                                              "typeString": "int_const 320"
                                            }
                                          ],
                                          "id": 51116,
                                          "name": "_requireInputIsRightLength",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 51634,
                                          "src": "2688:26:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                            "typeString": "function (bytes calldata,uint256) pure"
                                          }
                                        },
                                        "id": 51121,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2688:54:50",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$",
                                          "typeString": "tuple()"
                                        }
                                      },
                                      "id": 51122,
                                      "nodeType": "ExpressionStatement",
                                      "src": "2688:54:50"
                                    },
                                    {
                                      "assignments": [51124, 51126, 51128, 51130, 51132, 51134],
                                      "declarations": [
                                        {
                                          "constant": false,
                                          "id": 51124,
                                          "mutability": "mutable",
                                          "name": "_token",
                                          "nameLocation": "2798:6:50",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 51208,
                                          "src": "2790:14:50",
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          "typeName": {
                                            "id": 51123,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2790:7:50",
                                            "stateMutability": "nonpayable",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "visibility": "internal"
                                        },
                                        {
                                          "constant": false,
                                          "id": 51126,
                                          "mutability": "mutable",
                                          "name": "_amount",
                                          "nameLocation": "2838:7:50",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 51208,
                                          "src": "2830:15:50",
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "typeName": {
                                            "id": 51125,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2830:7:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "visibility": "internal"
                                        },
                                        {
                                          "constant": false,
                                          "id": 51128,
                                          "mutability": "mutable",
                                          "name": "_expiration",
                                          "nameLocation": "2879:11:50",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 51208,
                                          "src": "2871:19:50",
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "typeName": {
                                            "id": 51127,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2871:7:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "visibility": "internal"
                                        },
                                        {
                                          "constant": false,
                                          "id": 51130,
                                          "mutability": "mutable",
                                          "name": "_nonce",
                                          "nameLocation": "2924:6:50",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 51208,
                                          "src": "2916:14:50",
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "typeName": {
                                            "id": 51129,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2916:7:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "visibility": "internal"
                                        },
                                        {
                                          "constant": false,
                                          "id": 51132,
                                          "mutability": "mutable",
                                          "name": "_deadline",
                                          "nameLocation": "2964:9:50",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 51208,
                                          "src": "2956:17:50",
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "typeName": {
                                            "id": 51131,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2956:7:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "visibility": "internal"
                                        },
                                        {
                                          "constant": false,
                                          "id": 51134,
                                          "mutability": "mutable",
                                          "name": "_signature",
                                          "nameLocation": "3012:10:50",
                                          "nodeType": "VariableDeclaration",
                                          "scope": 51208,
                                          "src": "2999:23:50",
                                          "stateVariable": false,
                                          "storageLocation": "memory",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes"
                                          },
                                          "typeName": {
                                            "id": 51133,
                                            "name": "bytes",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2999:5:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_storage_ptr",
                                              "typeString": "bytes"
                                            }
                                          },
                                          "visibility": "internal"
                                        }
                                      ],
                                      "id": 51154,
                                      "initialValue": {
                                        "arguments": [
                                          {
                                            "baseExpression": {
                                              "id": 51137,
                                              "name": "_encodedParameters",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51000,
                                              "src": "3058:18:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                                "typeString": "bytes calldata[] calldata"
                                              }
                                            },
                                            "id": 51139,
                                            "indexExpression": {
                                              "id": 51138,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51016,
                                              "src": "3077:1:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "3058:21:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_calldata_ptr",
                                              "typeString": "bytes calldata"
                                            }
                                          },
                                          {
                                            "components": [
                                              {
                                                "id": 51141,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3082:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 51140,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "3082:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              {
                                                "id": 51143,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3091:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 51142,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "3091:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              {
                                                "id": 51145,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3100:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 51144,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "3100:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              {
                                                "id": 51147,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3109:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 51146,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "3109:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              {
                                                "id": 51149,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3118:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 51148,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "3118:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              {
                                                "id": 51151,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "3127:5:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                  "typeString": "type(bytes storage pointer)"
                                                },
                                                "typeName": {
                                                  "id": 51150,
                                                  "name": "bytes",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "3127:5:50",
                                                  "typeDescriptions": {}
                                                }
                                              }
                                            ],
                                            "id": 51152,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "3081:52:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                              "typeString": "tuple(type(address),type(uint256),type(uint256),type(uint256),type(uint256),type(bytes storage pointer))"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_calldata_ptr",
                                              "typeString": "bytes calldata"
                                            },
                                            {
                                              "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                              "typeString": "tuple(type(address),type(uint256),type(uint256),type(uint256),type(uint256),type(bytes storage pointer))"
                                            }
                                          ],
                                          "expression": {
                                            "id": 51135,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -1,
                                            "src": "3047:3:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 51136,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberLocation": "3051:6:50",
                                          "memberName": "decode",
                                          "nodeType": "MemberAccess",
                                          "src": "3047:10:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 51153,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3047:87:50",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$_t_address_payable_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$",
                                          "typeString": "tuple(address payable,uint256,uint256,uint256,uint256,bytes memory)"
                                        }
                                      },
                                      "nodeType": "VariableDeclarationStatement",
                                      "src": "2764:370:50"
                                    },
                                    {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "expression": {
                                              "id": 51158,
                                              "name": "msg",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -15,
                                              "src": "3196:3:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_message",
                                                "typeString": "msg"
                                              }
                                            },
                                            "id": 51159,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "3200:6:50",
                                            "memberName": "sender",
                                            "nodeType": "MemberAccess",
                                            "src": "3196:10:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "id": 51164,
                                                    "name": "_token",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 51124,
                                                    "src": "3377:6:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "id": 51168,
                                                            "name": "_amount",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51126,
                                                            "src": "3451:7:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          {
                                                            "expression": {
                                                              "arguments": [
                                                                {
                                                                  "id": 51171,
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "lValueRequested": false,
                                                                  "nodeType": "ElementaryTypeNameExpression",
                                                                  "src": "3465:7:50",
                                                                  "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_uint160_$",
                                                                    "typeString": "type(uint160)"
                                                                  },
                                                                  "typeName": {
                                                                    "id": 51170,
                                                                    "name": "uint160",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "3465:7:50",
                                                                    "typeDescriptions": {}
                                                                  }
                                                                }
                                                              ],
                                                              "expression": {
                                                                "argumentTypes": [
                                                                  {
                                                                    "typeIdentifier": "t_type$_t_uint160_$",
                                                                    "typeString": "type(uint160)"
                                                                  }
                                                                ],
                                                                "id": 51169,
                                                                "name": "type",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -27,
                                                                "src": "3460:4:50",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                  "typeString": "function () pure"
                                                                }
                                                              },
                                                              "id": 51172,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "kind": "functionCall",
                                                              "lValueRequested": false,
                                                              "nameLocations": [],
                                                              "names": [],
                                                              "nodeType": "FunctionCall",
                                                              "src": "3460:13:50",
                                                              "tryCall": false,
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_meta_type_t_uint160",
                                                                "typeString": "type(uint160)"
                                                              }
                                                            },
                                                            "id": 51173,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberLocation": "3474:3:50",
                                                            "memberName": "max",
                                                            "nodeType": "MemberAccess",
                                                            "src": "3460:17:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint160",
                                                              "typeString": "uint160"
                                                            }
                                                          }
                                                        ],
                                                        "expression": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            {
                                                              "typeIdentifier": "t_uint160",
                                                              "typeString": "uint160"
                                                            }
                                                          ],
                                                          "id": 51167,
                                                          "name": "_ensureSafeToCast",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51653,
                                                          "src": "3433:17:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                          }
                                                        },
                                                        "id": 51174,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "nameLocations": [],
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3433:45:50",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      ],
                                                      "id": 51166,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "3425:7:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint160_$",
                                                        "typeString": "type(uint160)"
                                                      },
                                                      "typeName": {
                                                        "id": 51165,
                                                        "name": "uint160",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3425:7:50",
                                                        "typeDescriptions": {}
                                                      }
                                                    },
                                                    "id": 51175,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3425:54:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint160",
                                                      "typeString": "uint160"
                                                    }
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "id": 51179,
                                                            "name": "_expiration",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51128,
                                                            "src": "3550:11:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          {
                                                            "expression": {
                                                              "arguments": [
                                                                {
                                                                  "id": 51182,
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "lValueRequested": false,
                                                                  "nodeType": "ElementaryTypeNameExpression",
                                                                  "src": "3568:6:50",
                                                                  "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_uint48_$",
                                                                    "typeString": "type(uint48)"
                                                                  },
                                                                  "typeName": {
                                                                    "id": 51181,
                                                                    "name": "uint48",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "3568:6:50",
                                                                    "typeDescriptions": {}
                                                                  }
                                                                }
                                                              ],
                                                              "expression": {
                                                                "argumentTypes": [
                                                                  {
                                                                    "typeIdentifier": "t_type$_t_uint48_$",
                                                                    "typeString": "type(uint48)"
                                                                  }
                                                                ],
                                                                "id": 51180,
                                                                "name": "type",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -27,
                                                                "src": "3563:4:50",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                  "typeString": "function () pure"
                                                                }
                                                              },
                                                              "id": 51183,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "kind": "functionCall",
                                                              "lValueRequested": false,
                                                              "nameLocations": [],
                                                              "names": [],
                                                              "nodeType": "FunctionCall",
                                                              "src": "3563:12:50",
                                                              "tryCall": false,
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_meta_type_t_uint48",
                                                                "typeString": "type(uint48)"
                                                              }
                                                            },
                                                            "id": 51184,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberLocation": "3576:3:50",
                                                            "memberName": "max",
                                                            "nodeType": "MemberAccess",
                                                            "src": "3563:16:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint48",
                                                              "typeString": "uint48"
                                                            }
                                                          }
                                                        ],
                                                        "expression": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            {
                                                              "typeIdentifier": "t_uint48",
                                                              "typeString": "uint48"
                                                            }
                                                          ],
                                                          "id": 51178,
                                                          "name": "_ensureSafeToCast",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51653,
                                                          "src": "3532:17:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                          }
                                                        },
                                                        "id": 51185,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "nameLocations": [],
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3532:48:50",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      ],
                                                      "id": 51177,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "3525:6:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint48_$",
                                                        "typeString": "type(uint48)"
                                                      },
                                                      "typeName": {
                                                        "id": 51176,
                                                        "name": "uint48",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3525:6:50",
                                                        "typeDescriptions": {}
                                                      }
                                                    },
                                                    "id": 51186,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3525:56:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint48",
                                                      "typeString": "uint48"
                                                    }
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "id": 51190,
                                                            "name": "_nonce",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 51130,
                                                            "src": "3647:6:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          {
                                                            "expression": {
                                                              "arguments": [
                                                                {
                                                                  "id": 51193,
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "lValueRequested": false,
                                                                  "nodeType": "ElementaryTypeNameExpression",
                                                                  "src": "3660:6:50",
                                                                  "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_uint48_$",
                                                                    "typeString": "type(uint48)"
                                                                  },
                                                                  "typeName": {
                                                                    "id": 51192,
                                                                    "name": "uint48",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "3660:6:50",
                                                                    "typeDescriptions": {}
                                                                  }
                                                                }
                                                              ],
                                                              "expression": {
                                                                "argumentTypes": [
                                                                  {
                                                                    "typeIdentifier": "t_type$_t_uint48_$",
                                                                    "typeString": "type(uint48)"
                                                                  }
                                                                ],
                                                                "id": 51191,
                                                                "name": "type",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": -27,
                                                                "src": "3655:4:50",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                                                  "typeString": "function () pure"
                                                                }
                                                              },
                                                              "id": 51194,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "kind": "functionCall",
                                                              "lValueRequested": false,
                                                              "nameLocations": [],
                                                              "names": [],
                                                              "nodeType": "FunctionCall",
                                                              "src": "3655:12:50",
                                                              "tryCall": false,
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_magic_meta_type_t_uint48",
                                                                "typeString": "type(uint48)"
                                                              }
                                                            },
                                                            "id": 51195,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberLocation": "3668:3:50",
                                                            "memberName": "max",
                                                            "nodeType": "MemberAccess",
                                                            "src": "3655:16:50",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint48",
                                                              "typeString": "uint48"
                                                            }
                                                          }
                                                        ],
                                                        "expression": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            {
                                                              "typeIdentifier": "t_uint48",
                                                              "typeString": "uint48"
                                                            }
                                                          ],
                                                          "id": 51189,
                                                          "name": "_ensureSafeToCast",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 51653,
                                                          "src": "3629:17:50",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                          }
                                                        },
                                                        "id": 51196,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "nameLocations": [],
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "3629:43:50",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "expression": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      ],
                                                      "id": 51188,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "nodeType": "ElementaryTypeNameExpression",
                                                      "src": "3622:6:50",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_uint48_$",
                                                        "typeString": "type(uint48)"
                                                      },
                                                      "typeName": {
                                                        "id": 51187,
                                                        "name": "uint48",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "3622:6:50",
                                                        "typeDescriptions": {}
                                                      }
                                                    },
                                                    "id": 51197,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "nameLocations": [],
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "3622:51:50",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint48",
                                                      "typeString": "uint48"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_uint160",
                                                      "typeString": "uint160"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_uint48",
                                                      "typeString": "uint48"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_uint48",
                                                      "typeString": "uint48"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 51162,
                                                    "name": "IAllowanceTransfer",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 43676,
                                                    "src": "3303:18:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_IAllowanceTransfer_$43676_$",
                                                      "typeString": "type(contract IAllowanceTransfer)"
                                                    }
                                                  },
                                                  "id": 51163,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "3322:13:50",
                                                  "memberName": "PermitDetails",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 43544,
                                                  "src": "3303:32:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_struct$_PermitDetails_$43544_storage_ptr_$",
                                                    "typeString": "type(struct IAllowanceTransfer.PermitDetails storage pointer)"
                                                  }
                                                },
                                                "id": 51198,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "structConstructorCall",
                                                "lValueRequested": false,
                                                "nameLocations": [
                                                  "3370:5:50",
                                                  "3417:6:50",
                                                  "3513:10:50",
                                                  "3615:5:50"
                                                ],
                                                "names": ["token", "amount", "expiration", "nonce"],
                                                "nodeType": "FunctionCall",
                                                "src": "3303:401:50",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_PermitDetails_$43544_memory_ptr",
                                                  "typeString": "struct IAllowanceTransfer.PermitDetails memory"
                                                }
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "id": 51201,
                                                    "name": "this",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": -28,
                                                    "src": "3751:4:50",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                      "typeString": "contract VaultRouter"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                      "typeString": "contract VaultRouter"
                                                    }
                                                  ],
                                                  "id": 51200,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "3743:7:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                  },
                                                  "typeName": {
                                                    "id": 51199,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "3743:7:50",
                                                    "typeDescriptions": {}
                                                  }
                                                },
                                                "id": 51202,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3743:13:50",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 51203,
                                                "name": "_deadline",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 51132,
                                                "src": "3799:9:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_struct$_PermitDetails_$43544_memory_ptr",
                                                  "typeString": "struct IAllowanceTransfer.PermitDetails memory"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "expression": {
                                                "id": 51160,
                                                "name": "IAllowanceTransfer",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 43676,
                                                "src": "3232:18:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IAllowanceTransfer_$43676_$",
                                                  "typeString": "type(contract IAllowanceTransfer)"
                                                }
                                              },
                                              "id": 51161,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "3251:12:50",
                                              "memberName": "PermitSingle",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 43553,
                                              "src": "3232:31:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_struct$_PermitSingle_$43553_storage_ptr_$",
                                                "typeString": "type(struct IAllowanceTransfer.PermitSingle storage pointer)"
                                              }
                                            },
                                            "id": 51204,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "structConstructorCall",
                                            "lValueRequested": false,
                                            "nameLocations": [
                                              "3294:7:50",
                                              "3734:7:50",
                                              "3786:11:50"
                                            ],
                                            "names": ["details", "spender", "sigDeadline"],
                                            "nodeType": "FunctionCall",
                                            "src": "3232:603:50",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_PermitSingle_$43553_memory_ptr",
                                              "typeString": "struct IAllowanceTransfer.PermitSingle memory"
                                            }
                                          },
                                          {
                                            "id": 51205,
                                            "name": "_signature",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 51134,
                                            "src": "3861:10:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_struct$_PermitSingle_$43553_memory_ptr",
                                              "typeString": "struct IAllowanceTransfer.PermitSingle memory"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "expression": {
                                            "id": 51155,
                                            "name": "permit2",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 50965,
                                            "src": "3156:7:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IPermit2_$43696",
                                              "typeString": "contract IPermit2"
                                            }
                                          },
                                          "id": 51157,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "3164:6:50",
                                          "memberName": "permit",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 43626,
                                          "src": "3156:14:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_struct$_PermitSingle_$43553_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                            "typeString": "function (address,struct IAllowanceTransfer.PermitSingle memory,bytes memory) external"
                                          }
                                        },
                                        "id": 51206,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3156:737:50",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_tuple$__$",
                                          "typeString": "tuple()"
                                        }
                                      },
                                      "id": 51207,
                                      "nodeType": "ExpressionStatement",
                                      "src": "3156:737:50"
                                    }
                                  ]
                                }
                              },
                              "id": 51581,
                              "nodeType": "IfStatement",
                              "src": "1668:5442:50",
                              "trueBody": {
                                "id": 51109,
                                "nodeType": "Block",
                                "src": "1737:866:50",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "baseExpression": {
                                            "id": 51049,
                                            "name": "_encodedParameters",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 51000,
                                            "src": "1786:18:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                              "typeString": "bytes calldata[] calldata"
                                            }
                                          },
                                          "id": 51051,
                                          "indexExpression": {
                                            "id": 51050,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 51016,
                                            "src": "1805:1:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "1786:21:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          }
                                        },
                                        {
                                          "hexValue": "323838",
                                          "id": 51052,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1809:3:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_288_by_1",
                                            "typeString": "int_const 288"
                                          },
                                          "value": "288"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          },
                                          {
                                            "typeIdentifier": "t_rational_288_by_1",
                                            "typeString": "int_const 288"
                                          }
                                        ],
                                        "id": 51048,
                                        "name": "_requireInputIsRightLength",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 51634,
                                        "src": "1759:26:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$_t_uint256_$returns$__$",
                                          "typeString": "function (bytes calldata,uint256) pure"
                                        }
                                      },
                                      "id": 51053,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1759:54:50",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 51054,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1759:54:50"
                                  },
                                  {
                                    "assignments": [51056, 51058, 51060, 51062, 51064],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 51056,
                                        "mutability": "mutable",
                                        "name": "_token",
                                        "nameLocation": "1844:6:50",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 51109,
                                        "src": "1836:14:50",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        "typeName": {
                                          "id": 51055,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1836:7:50",
                                          "stateMutability": "nonpayable",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "visibility": "internal"
                                      },
                                      {
                                        "constant": false,
                                        "id": 51058,
                                        "mutability": "mutable",
                                        "name": "_amount",
                                        "nameLocation": "1860:7:50",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 51109,
                                        "src": "1852:15:50",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 51057,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1852:7:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      },
                                      {
                                        "constant": false,
                                        "id": 51060,
                                        "mutability": "mutable",
                                        "name": "_nonce",
                                        "nameLocation": "1877:6:50",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 51109,
                                        "src": "1869:14:50",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 51059,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1869:7:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      },
                                      {
                                        "constant": false,
                                        "id": 51062,
                                        "mutability": "mutable",
                                        "name": "_deadline",
                                        "nameLocation": "1893:9:50",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 51109,
                                        "src": "1885:17:50",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 51061,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1885:7:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      },
                                      {
                                        "constant": false,
                                        "id": 51064,
                                        "mutability": "mutable",
                                        "name": "_signature",
                                        "nameLocation": "1917:10:50",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 51109,
                                        "src": "1904:23:50",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes"
                                        },
                                        "typeName": {
                                          "id": 51063,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1904:5:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 51082,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "baseExpression": {
                                            "id": 51067,
                                            "name": "_encodedParameters",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 51000,
                                            "src": "1966:18:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                              "typeString": "bytes calldata[] calldata"
                                            }
                                          },
                                          "id": 51069,
                                          "indexExpression": {
                                            "id": 51068,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 51016,
                                            "src": "1985:1:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "1966:21:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          }
                                        },
                                        {
                                          "components": [
                                            {
                                              "id": 51071,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "1990:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 51070,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1990:7:50",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            {
                                              "id": 51073,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "1999:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                "typeString": "type(uint256)"
                                              },
                                              "typeName": {
                                                "id": 51072,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1999:7:50",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            {
                                              "id": 51075,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2008:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                "typeString": "type(uint256)"
                                              },
                                              "typeName": {
                                                "id": 51074,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2008:7:50",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            {
                                              "id": 51077,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2017:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                "typeString": "type(uint256)"
                                              },
                                              "typeName": {
                                                "id": 51076,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2017:7:50",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            {
                                              "id": 51079,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2026:5:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                                "typeString": "type(bytes storage pointer)"
                                              },
                                              "typeName": {
                                                "id": 51078,
                                                "name": "bytes",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "2026:5:50",
                                                "typeDescriptions": {}
                                              }
                                            }
                                          ],
                                          "id": 51080,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "1989:43:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                            "typeString": "tuple(type(address),type(uint256),type(uint256),type(uint256),type(bytes storage pointer))"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                          },
                                          {
                                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$",
                                            "typeString": "tuple(type(address),type(uint256),type(uint256),type(uint256),type(bytes storage pointer))"
                                          }
                                        ],
                                        "expression": {
                                          "id": 51065,
                                          "name": "abi",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -1,
                                          "src": "1955:3:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_magic_abi",
                                            "typeString": "abi"
                                          }
                                        },
                                        "id": 51066,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "1959:6:50",
                                        "memberName": "decode",
                                        "nodeType": "MemberAccess",
                                        "src": "1955:10:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 51081,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1955:78:50",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$",
                                        "typeString": "tuple(address payable,uint256,uint256,uint256,bytes memory)"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1835:198:50"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "id": 51090,
                                                  "name": "_token",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51056,
                                                  "src": "2230:6:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                {
                                                  "id": 51091,
                                                  "name": "_amount",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 51058,
                                                  "src": "2246:7:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  },
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "expression": {
                                                  "id": 51088,
                                                  "name": "ISignatureTransfer",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 43836,
                                                  "src": "2186:18:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_contract$_ISignatureTransfer_$43836_$",
                                                    "typeString": "type(contract ISignatureTransfer)"
                                                  }
                                                },
                                                "id": 51089,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberLocation": "2205:16:50",
                                                "memberName": "TokenPermissions",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 43726,
                                                "src": "2186:35:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_struct$_TokenPermissions_$43726_storage_ptr_$",
                                                  "typeString": "type(struct ISignatureTransfer.TokenPermissions storage pointer)"
                                                }
                                              },
                                              "id": 51092,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "structConstructorCall",
                                              "lValueRequested": false,
                                              "nameLocations": ["2223:5:50", "2238:6:50"],
                                              "names": ["token", "amount"],
                                              "nodeType": "FunctionCall",
                                              "src": "2186:69:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenPermissions_$43726_memory_ptr",
                                                "typeString": "struct ISignatureTransfer.TokenPermissions memory"
                                              }
                                            },
                                            {
                                              "id": 51093,
                                              "name": "_nonce",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51060,
                                              "src": "2292:6:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            {
                                              "id": 51094,
                                              "name": "_deadline",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51062,
                                              "src": "2338:9:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_struct$_TokenPermissions_$43726_memory_ptr",
                                                "typeString": "struct ISignatureTransfer.TokenPermissions memory"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "id": 51086,
                                              "name": "ISignatureTransfer",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 43836,
                                              "src": "2107:18:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_ISignatureTransfer_$43836_$",
                                                "typeString": "type(contract ISignatureTransfer)"
                                              }
                                            },
                                            "id": 51087,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "2126:18:50",
                                            "memberName": "PermitTransferFrom",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 43735,
                                            "src": "2107:37:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_struct$_PermitTransferFrom_$43735_storage_ptr_$",
                                              "typeString": "type(struct ISignatureTransfer.PermitTransferFrom storage pointer)"
                                            }
                                          },
                                          "id": 51095,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "structConstructorCall",
                                          "lValueRequested": false,
                                          "nameLocations": ["2175:9:50", "2285:5:50", "2328:8:50"],
                                          "names": ["permitted", "nonce", "deadline"],
                                          "nodeType": "FunctionCall",
                                          "src": "2107:267:50",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_PermitTransferFrom_$43735_memory_ptr",
                                            "typeString": "struct ISignatureTransfer.PermitTransferFrom memory"
                                          }
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "id": 51100,
                                                  "name": "this",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": -28,
                                                  "src": "2457:4:50",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                    "typeString": "contract VaultRouter"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_contract$_VaultRouter_$51654",
                                                    "typeString": "contract VaultRouter"
                                                  }
                                                ],
                                                "id": 51099,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "2449:7:50",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 51098,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "2449:7:50",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 51101,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2449:13:50",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 51102,
                                              "name": "_amount",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 51058,
                                              "src": "2481:7:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "id": 51096,
                                              "name": "ISignatureTransfer",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 43836,
                                              "src": "2400:18:50",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_ISignatureTransfer_$43836_$",
                                                "typeString": "type(contract ISignatureTransfer)"
                                              }
                                            },
                                            "id": 51097,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "2419:24:50",
                                            "memberName": "SignatureTransferDetails",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 43741,
                                            "src": "2400:43:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_struct$_SignatureTransferDetails_$43741_storage_ptr_$",
                                              "typeString": "type(struct ISignatureTransfer.SignatureTransferDetails storage pointer)"
                                            }
                                          },
                                          "id": 51103,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "structConstructorCall",
                                          "lValueRequested": false,
                                          "nameLocations": ["2445:2:50", "2464:15:50"],
                                          "names": ["to", "requestedAmount"],
                                          "nodeType": "FunctionCall",
                                          "src": "2400:90:50",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_SignatureTransferDetails_$43741_memory_ptr",
                                            "typeString": "struct ISignatureTransfer.SignatureTransferDetails memory"
                                          }
                                        },
                                        {
                                          "expression": {
                                            "id": 51104,
                                            "name": "msg",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": -15,
                                            "src": "2516:3:50",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_message",
                                              "typeString": "msg"
                                            }
                                          },
                                          "id": 51105,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "2520:6:50",
                                          "memberName": "sender",
                                          "nodeType": "MemberAccess",
                                          "src": "2516:10:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 51106,
                                          "name": "_signature",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 51064,
                                          "src": "2552:10:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_struct$_PermitTransferFrom_$43735_memory_ptr",
                                            "typeString": "struct ISignatureTransfer.PermitTransferFrom memory"
                                          },
                                          {
                                            "typeIdentifier": "t_struct$_SignatureTransferDetails_$43741_memory_ptr",
                                            "typeString": "struct ISignatureTransfer.SignatureTransferDetails memory"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "expression": {
                                          "id": 51083,
                                          "name": "permit2",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 50965,
                                          "src": "2055:7:50",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IPermit2_$43696",
                                            "typeString": "contract IPermit2"
                                          }
                                        },
                                        "id": 51085,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "2063:18:50",
                                        "memberName": "permitTransferFrom",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 43775,
                                        "src": "2055:26:50",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_nonpayable$_t_struct$_PermitTransferFrom_$43735_memory_ptr_$_t_struct$_SignatureTransferDetails_$43741_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                          "typeString": "function (struct ISignatureTransfer.PermitTransferFrom memory,struct ISignatureTransfer.SignatureTransferDetails memory,address,bytes memory) external"
                                        }
                                      },
                                      "id": 51107,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2055:529:50",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 51108,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2055:529:50"
                                  }
                                ]
                              }
                            },
                            "id": 51582,
                            "nodeType": "IfStatement",
                            "src": "1566:5544:50",
                            "trueBody": {
                              "id": 51041,
                              "nodeType": "Block",
                              "src": "1616:46:50",
                              "statements": [
                                {
                                  "id": 51040,
                                  "nodeType": "Break",
                                  "src": "1638:5:50"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 51021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 51018,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51016,
                          "src": "1454:1:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 51019,
                            "name": "_encodedParameters",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51000,
                            "src": "1458:18:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 51020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1477:6:50",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "1458:25:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1454:29:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 51584,
                      "initializationExpression": {
                        "assignments": [51016],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 51016,
                            "mutability": "mutable",
                            "name": "i",
                            "nameLocation": "1451:1:50",
                            "nodeType": "VariableDeclaration",
                            "scope": 51584,
                            "src": "1443:9:50",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 51015,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1443:7:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 51017,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1443:9:50"
                      },
                      "loopExpression": {
                        "expression": {
                          "id": 51023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": true,
                          "src": "1485:3:50",
                          "subExpression": {
                            "id": 51022,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 51016,
                            "src": "1487:1:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 51024,
                        "nodeType": "ExpressionStatement",
                        "src": "1485:3:50"
                      },
                      "nodeType": "ForStatement",
                      "src": "1438:5686:50"
                    }
                  ]
                }
              ]
            },
            "functionSelector": "2b492640",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "multiInteract",
            "nameLocation": "1176:13:50",
            "parameters": {
              "id": 51001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 50997,
                  "mutability": "mutable",
                  "name": "_packedOperations",
                  "nameLocation": "1205:17:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51587,
                  "src": "1190:32:50",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 50996,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1190:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51000,
                  "mutability": "mutable",
                  "name": "_encodedParameters",
                  "nameLocation": "1241:18:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51587,
                  "src": "1224:35:50",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 50998,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1224:5:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 50999,
                    "nodeType": "ArrayTypeName",
                    "src": "1224:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1189:71:50"
            },
            "returnParameters": {
              "id": 51002,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1270:0:50"
            },
            "scope": 51654,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51614,
            "nodeType": "FunctionDefinition",
            "src": "7146:198:50",
            "nodes": [],
            "body": {
              "id": 51613,
              "nodeType": "Block",
              "src": "7246:98:50",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51601,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51589,
                        "src": "7284:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 51602,
                        "name": "_vaultAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51591,
                        "src": "7292:13:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "condition": {
                          "id": 51603,
                          "name": "isMax",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51593,
                          "src": "7307:5:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseExpression": {
                          "hexValue": "30",
                          "id": 51609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7335:1:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "id": 51610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "Conditional",
                        "src": "7307:29:50",
                        "trueExpression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 51606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7320:7:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 51605,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7320:7:50",
                                  "typeDescriptions": {}
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                }
                              ],
                              "id": 51604,
                              "name": "type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -27,
                              "src": "7315:4:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 51607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7315:13:50",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_meta_type_t_uint256",
                              "typeString": "type(uint256)"
                            }
                          },
                          "id": 51608,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "7329:3:50",
                          "memberName": "max",
                          "nodeType": "MemberAccess",
                          "src": "7315:17:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "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": 51598,
                        "name": "SafeTransferLib",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45613,
                        "src": "7256:15:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$45613_$",
                          "typeString": "type(library SafeTransferLib)"
                        }
                      },
                      "id": 51600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7272:11:50",
                      "memberName": "safeApprove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45588,
                      "src": "7256:27:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 51611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7256:81:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51612,
                  "nodeType": "ExpressionStatement",
                  "src": "7256:81:50"
                }
              ]
            },
            "functionSelector": "3f7d7bc9",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51596,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51595,
                  "name": "onlyOwner",
                  "nameLocations": ["7236:9:50"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 44997,
                  "src": "7236:9:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "7236:9:50"
              }
            ],
            "name": "approveTokenForVault",
            "nameLocation": "7155:20:50",
            "parameters": {
              "id": 51594,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51589,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "7184:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51614,
                  "src": "7176:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7176:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51591,
                  "mutability": "mutable",
                  "name": "_vaultAddress",
                  "nameLocation": "7200:13:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51614,
                  "src": "7192:21:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51590,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7192:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51593,
                  "mutability": "mutable",
                  "name": "isMax",
                  "nameLocation": "7220:5:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51614,
                  "src": "7215:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 51592,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7215:4:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7175:51:50"
            },
            "returnParameters": {
              "id": 51597,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7246:0:50"
            },
            "scope": 51654,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51634,
            "nodeType": "FunctionDefinition",
            "src": "7350:277:50",
            "nodes": [],
            "body": {
              "id": 51633,
              "nodeType": "Block",
              "src": "7458:169:50",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51621,
                      "name": "_expectedLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51618,
                      "src": "7472:15:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 51622,
                        "name": "_encodedParameter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51616,
                        "src": "7491:17:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      "id": 51623,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7509:6:50",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7491:24:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7472:43:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51632,
                  "nodeType": "IfStatement",
                  "src": "7468:153:50",
                  "trueBody": {
                    "id": 51631,
                    "nodeType": "Block",
                    "src": "7517:104:50",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "id": 51626,
                              "name": "_expectedLength",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51618,
                              "src": "7568:15:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 51627,
                                "name": "_encodedParameter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 51616,
                                "src": "7585:17:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 51628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7603:6:50",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "7585:24:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 51625,
                            "name": "InvalidEncodedParameterLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 50975,
                            "src": "7538:29:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) pure"
                            }
                          },
                          "id": 51629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7538:72:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 51630,
                        "nodeType": "RevertStatement",
                        "src": "7531:79:50"
                      }
                    ]
                  }
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_requireInputIsRightLength",
            "nameLocation": "7359:26:50",
            "parameters": {
              "id": 51619,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51616,
                  "mutability": "mutable",
                  "name": "_encodedParameter",
                  "nameLocation": "7401:17:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51634,
                  "src": "7386:32:50",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 51615,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7386:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51618,
                  "mutability": "mutable",
                  "name": "_expectedLength",
                  "nameLocation": "7428:15:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51634,
                  "src": "7420:23:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51617,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7420:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7385:59:50"
            },
            "returnParameters": {
              "id": 51620,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7458:0:50"
            },
            "scope": 51654,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 51653,
            "nodeType": "FunctionDefinition",
            "src": "7633:161:50",
            "nodes": [],
            "body": {
              "id": 51652,
              "nodeType": "Block",
              "src": "7720:74:50",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 51645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 51643,
                      "name": "maxOfX",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51638,
                      "src": "7734:6:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 51644,
                      "name": "num",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51636,
                      "src": "7743:3:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7734:12:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 51649,
                  "nodeType": "IfStatement",
                  "src": "7730:37:50",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 51646,
                        "name": "UnsafeCast",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 50969,
                        "src": "7755:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 51647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7755:12:50",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 51648,
                    "nodeType": "RevertStatement",
                    "src": "7748:19:50"
                  }
                },
                {
                  "expression": {
                    "id": 51650,
                    "name": "num",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 51636,
                    "src": "7784:3:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 51642,
                  "id": 51651,
                  "nodeType": "Return",
                  "src": "7777:10:50"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_ensureSafeToCast",
            "nameLocation": "7642:17:50",
            "parameters": {
              "id": 51639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51636,
                  "mutability": "mutable",
                  "name": "num",
                  "nameLocation": "7668:3:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51653,
                  "src": "7660:11:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51635,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7660:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51638,
                  "mutability": "mutable",
                  "name": "maxOfX",
                  "nameLocation": "7681:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 51653,
                  "src": "7673:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51637,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7673:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7659:29:50"
            },
            "returnParameters": {
              "id": 51642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51641,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51653,
                  "src": "7711:7:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7711:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7710:9:50"
            },
            "scope": 51654,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 50958,
              "name": "Ownable",
              "nameLocations": ["488:7:50"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 44998,
              "src": "488:7:50"
            },
            "id": 50959,
            "nodeType": "InheritanceSpecifier",
            "src": "488:7:50"
          }
        ],
        "canonicalName": "VaultRouter",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [51654, 44998],
        "name": "VaultRouter",
        "nameLocation": "473:11:50",
        "scope": 51655,
        "usedErrors": [44810, 44813, 44816, 44819, 50967, 50969, 50975],
        "usedEvents": [44826, 44831, 44836]
      }
    ],
    "license": "MIT"
  },
  "id": 50
}
