[
  {
    "inputs": [
      { "internalType": "address", "name": "initialComptroller", "type": "address" },
      { "internalType": "address", "name": "initialNFTDescriptor", "type": "address" }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "comptroller", "type": "address" },
      { "internalType": "address", "name": "caller", "type": "address" }
    ],
    "name": "Comptrollerable_CallerNotComptroller",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "previousComptroller", "type": "address" },
      { "internalType": "address", "name": "newComptroller", "type": "address" },
      { "internalType": "bytes4", "name": "minimalInterfaceId", "type": "bytes4" }
    ],
    "name": "Comptrollerable_UnsupportedInterfaceId",
    "type": "error"
  },
  { "inputs": [], "name": "DelegateCall", "type": "error" },
  {
    "inputs": [
      { "internalType": "address", "name": "sender", "type": "address" },
      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },
      { "internalType": "address", "name": "owner", "type": "address" }
    ],
    "name": "ERC721IncorrectOwner",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "operator", "type": "address" },
      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }
    ],
    "name": "ERC721InsufficientApproval",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "approver", "type": "address" }],
    "name": "ERC721InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "operator", "type": "address" }],
    "name": "ERC721InvalidOperator",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }],
    "name": "ERC721InvalidOwner",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "receiver", "type": "address" }],
    "name": "ERC721InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "sender", "type": "address" }],
    "name": "ERC721InvalidSender",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }],
    "name": "ERC721NonexistentToken",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "enum Lockup.Model", "name": "actualLockupModel", "type": "uint8" },
      { "internalType": "enum Lockup.Model", "name": "expectedLockupModel", "type": "uint8" }
    ],
    "name": "SablierLockupState_NotExpectedModel",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockupState_Null",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "recipient", "type": "address" }],
    "name": "SablierLockup_AllowToHookUnsupportedInterface",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "feePaid", "type": "uint256" },
      { "internalType": "uint256", "name": "minFeeWei", "type": "uint256" }
    ],
    "name": "SablierLockup_InsufficientFeePayment",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "recipient", "type": "address" }],
    "name": "SablierLockup_InvalidHookSelector",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "nativeToken", "type": "address" }],
    "name": "SablierLockup_NativeTokenAlreadySet",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }],
    "name": "SablierLockup_NotTransferable",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "internalType": "uint128", "name": "amount", "type": "uint128" },
      { "internalType": "uint128", "name": "withdrawableAmount", "type": "uint128" }
    ],
    "name": "SablierLockup_Overdraw",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockup_StreamCanceled",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockup_StreamDepleted",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockup_StreamNotCancelable",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockup_StreamNotDepleted",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockup_StreamSettled",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "internalType": "address", "name": "caller", "type": "address" }
    ],
    "name": "SablierLockup_Unauthorized",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockup_WithdrawAmountZero",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "streamIdsCount", "type": "uint256" },
      { "internalType": "uint256", "name": "amountsCount", "type": "uint256" }
    ],
    "name": "SablierLockup_WithdrawArrayCountsNotEqual",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "SablierLockup_WithdrawToZeroAddress",
    "type": "error"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "internalType": "address", "name": "caller", "type": "address" },
      { "internalType": "address", "name": "to", "type": "address" }
    ],
    "name": "SablierLockup_WithdrawalAddressNotRecipient",
    "type": "error"
  },
  {
    "inputs": [{ "internalType": "address", "name": "token", "type": "address" }],
    "name": "SafeERC20FailedOperation",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "contract ISablierComptroller",
        "name": "comptroller",
        "type": "address"
      },
      { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }
    ],
    "name": "AllowToHook",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "address", "name": "owner", "type": "address" },
      { "indexed": true, "internalType": "address", "name": "approved", "type": "address" },
      { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "address", "name": "owner", "type": "address" },
      { "indexed": true, "internalType": "address", "name": "operator", "type": "address" },
      { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" },
      { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" }
    ],
    "name": "BatchMetadataUpdate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": false, "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "indexed": true, "internalType": "address", "name": "sender", "type": "address" },
      { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" },
      { "indexed": true, "internalType": "contract IERC20", "name": "token", "type": "address" },
      { "indexed": false, "internalType": "uint128", "name": "senderAmount", "type": "uint128" },
      { "indexed": false, "internalType": "uint128", "name": "recipientAmount", "type": "uint128" }
    ],
    "name": "CancelLockupStream",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "uint256", "name": "streamId", "type": "uint256" },
      {
        "components": [
          { "internalType": "address", "name": "funder", "type": "address" },
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          {
            "components": [
              { "internalType": "uint40", "name": "start", "type": "uint40" },
              { "internalType": "uint40", "name": "end", "type": "uint40" }
            ],
            "internalType": "struct Lockup.Timestamps",
            "name": "timestamps",
            "type": "tuple"
          },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "indexed": false,
        "internalType": "struct Lockup.CreateEventCommon",
        "name": "commonParams",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "UD2x18", "name": "exponent", "type": "uint64" },
          { "internalType": "uint40", "name": "timestamp", "type": "uint40" }
        ],
        "indexed": false,
        "internalType": "struct LockupDynamic.Segment[]",
        "name": "segments",
        "type": "tuple[]"
      }
    ],
    "name": "CreateLockupDynamicStream",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "uint256", "name": "streamId", "type": "uint256" },
      {
        "components": [
          { "internalType": "address", "name": "funder", "type": "address" },
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          {
            "components": [
              { "internalType": "uint40", "name": "start", "type": "uint40" },
              { "internalType": "uint40", "name": "end", "type": "uint40" }
            ],
            "internalType": "struct Lockup.Timestamps",
            "name": "timestamps",
            "type": "tuple"
          },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "indexed": false,
        "internalType": "struct Lockup.CreateEventCommon",
        "name": "commonParams",
        "type": "tuple"
      },
      { "indexed": false, "internalType": "uint40", "name": "cliffTime", "type": "uint40" },
      {
        "components": [
          { "internalType": "uint128", "name": "start", "type": "uint128" },
          { "internalType": "uint128", "name": "cliff", "type": "uint128" }
        ],
        "indexed": false,
        "internalType": "struct LockupLinear.UnlockAmounts",
        "name": "unlockAmounts",
        "type": "tuple"
      }
    ],
    "name": "CreateLockupLinearStream",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "uint256", "name": "streamId", "type": "uint256" },
      {
        "components": [
          { "internalType": "address", "name": "funder", "type": "address" },
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          {
            "components": [
              { "internalType": "uint40", "name": "start", "type": "uint40" },
              { "internalType": "uint40", "name": "end", "type": "uint40" }
            ],
            "internalType": "struct Lockup.Timestamps",
            "name": "timestamps",
            "type": "tuple"
          },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "indexed": false,
        "internalType": "struct Lockup.CreateEventCommon",
        "name": "commonParams",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "uint40", "name": "timestamp", "type": "uint40" }
        ],
        "indexed": false,
        "internalType": "struct LockupTranched.Tranche[]",
        "name": "tranches",
        "type": "tuple[]"
      }
    ],
    "name": "CreateLockupTranchedStream",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "indexed": false, "internalType": "bytes", "name": "revertData", "type": "bytes" }
    ],
    "name": "InvalidStreamInCancelMultiple",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "indexed": false, "internalType": "bytes", "name": "revertData", "type": "bytes" }
    ],
    "name": "InvalidWithdrawalInWithdrawMultiple",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }
    ],
    "name": "MetadataUpdate",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "uint256", "name": "streamId", "type": "uint256" }
    ],
    "name": "RenounceLockupStream",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "contract ISablierComptroller",
        "name": "oldComptroller",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "contract ISablierComptroller",
        "name": "newComptroller",
        "type": "address"
      }
    ],
    "name": "SetComptroller",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "contract ISablierComptroller",
        "name": "comptroller",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "contract ILockupNFTDescriptor",
        "name": "oldNFTDescriptor",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "contract ILockupNFTDescriptor",
        "name": "newNFTDescriptor",
        "type": "address"
      }
    ],
    "name": "SetNFTDescriptor",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "address", "name": "from", "type": "address" },
      { "indexed": true, "internalType": "address", "name": "to", "type": "address" },
      { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "contract ISablierComptroller",
        "name": "comptroller",
        "type": "address"
      },
      { "indexed": false, "internalType": "uint256", "name": "feeAmount", "type": "uint256" }
    ],
    "name": "TransferFeesToComptroller",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      { "indexed": true, "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "indexed": true, "internalType": "address", "name": "to", "type": "address" },
      { "indexed": true, "internalType": "contract IERC20", "name": "token", "type": "address" },
      { "indexed": false, "internalType": "uint128", "name": "amount", "type": "uint128" }
    ],
    "name": "WithdrawFromLockupStream",
    "type": "event"
  },
  {
    "inputs": [{ "internalType": "contract IERC20", "name": "token", "type": "address" }],
    "name": "aggregateAmount",
    "outputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "address", "name": "recipient", "type": "address" }],
    "name": "allowToHook",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "to", "type": "address" },
      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }],
    "name": "balanceOf",
    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "bytes[]", "name": "calls", "type": "bytes[]" }],
    "name": "batch",
    "outputs": [{ "internalType": "bytes[]", "name": "results", "type": "bytes[]" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "burn",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "calculateMinFeeWei",
    "outputs": [{ "internalType": "uint256", "name": "minFeeWei", "type": "uint256" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "cancel",
    "outputs": [{ "internalType": "uint128", "name": "refundedAmount", "type": "uint128" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256[]", "name": "streamIds", "type": "uint256[]" }],
    "name": "cancelMultiple",
    "outputs": [{ "internalType": "uint128[]", "name": "refundedAmounts", "type": "uint128[]" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "comptroller",
    "outputs": [{ "internalType": "contract ISablierComptroller", "name": "", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "internalType": "struct Lockup.CreateWithDurations",
        "name": "params",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "UD2x18", "name": "exponent", "type": "uint64" },
          { "internalType": "uint40", "name": "duration", "type": "uint40" }
        ],
        "internalType": "struct LockupDynamic.SegmentWithDuration[]",
        "name": "segmentsWithDuration",
        "type": "tuple[]"
      }
    ],
    "name": "createWithDurationsLD",
    "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "internalType": "struct Lockup.CreateWithDurations",
        "name": "params",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "start", "type": "uint128" },
          { "internalType": "uint128", "name": "cliff", "type": "uint128" }
        ],
        "internalType": "struct LockupLinear.UnlockAmounts",
        "name": "unlockAmounts",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint40", "name": "cliff", "type": "uint40" },
          { "internalType": "uint40", "name": "total", "type": "uint40" }
        ],
        "internalType": "struct LockupLinear.Durations",
        "name": "durations",
        "type": "tuple"
      }
    ],
    "name": "createWithDurationsLL",
    "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "internalType": "struct Lockup.CreateWithDurations",
        "name": "params",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "uint40", "name": "duration", "type": "uint40" }
        ],
        "internalType": "struct LockupTranched.TrancheWithDuration[]",
        "name": "tranchesWithDuration",
        "type": "tuple[]"
      }
    ],
    "name": "createWithDurationsLT",
    "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          {
            "components": [
              { "internalType": "uint40", "name": "start", "type": "uint40" },
              { "internalType": "uint40", "name": "end", "type": "uint40" }
            ],
            "internalType": "struct Lockup.Timestamps",
            "name": "timestamps",
            "type": "tuple"
          },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "internalType": "struct Lockup.CreateWithTimestamps",
        "name": "params",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "UD2x18", "name": "exponent", "type": "uint64" },
          { "internalType": "uint40", "name": "timestamp", "type": "uint40" }
        ],
        "internalType": "struct LockupDynamic.Segment[]",
        "name": "segments",
        "type": "tuple[]"
      }
    ],
    "name": "createWithTimestampsLD",
    "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          {
            "components": [
              { "internalType": "uint40", "name": "start", "type": "uint40" },
              { "internalType": "uint40", "name": "end", "type": "uint40" }
            ],
            "internalType": "struct Lockup.Timestamps",
            "name": "timestamps",
            "type": "tuple"
          },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "internalType": "struct Lockup.CreateWithTimestamps",
        "name": "params",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "start", "type": "uint128" },
          { "internalType": "uint128", "name": "cliff", "type": "uint128" }
        ],
        "internalType": "struct LockupLinear.UnlockAmounts",
        "name": "unlockAmounts",
        "type": "tuple"
      },
      { "internalType": "uint40", "name": "cliffTime", "type": "uint40" }
    ],
    "name": "createWithTimestampsLL",
    "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          { "internalType": "address", "name": "sender", "type": "address" },
          { "internalType": "address", "name": "recipient", "type": "address" },
          { "internalType": "uint128", "name": "depositAmount", "type": "uint128" },
          { "internalType": "contract IERC20", "name": "token", "type": "address" },
          { "internalType": "bool", "name": "cancelable", "type": "bool" },
          { "internalType": "bool", "name": "transferable", "type": "bool" },
          {
            "components": [
              { "internalType": "uint40", "name": "start", "type": "uint40" },
              { "internalType": "uint40", "name": "end", "type": "uint40" }
            ],
            "internalType": "struct Lockup.Timestamps",
            "name": "timestamps",
            "type": "tuple"
          },
          { "internalType": "string", "name": "shape", "type": "string" }
        ],
        "internalType": "struct Lockup.CreateWithTimestamps",
        "name": "params",
        "type": "tuple"
      },
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "uint40", "name": "timestamp", "type": "uint40" }
        ],
        "internalType": "struct LockupTranched.Tranche[]",
        "name": "tranches",
        "type": "tuple[]"
      }
    ],
    "name": "createWithTimestampsLT",
    "outputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }],
    "name": "getApproved",
    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getCliffTime",
    "outputs": [{ "internalType": "uint40", "name": "cliffTime", "type": "uint40" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getDepositedAmount",
    "outputs": [{ "internalType": "uint128", "name": "depositedAmount", "type": "uint128" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getEndTime",
    "outputs": [{ "internalType": "uint40", "name": "endTime", "type": "uint40" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getLockupModel",
    "outputs": [{ "internalType": "enum Lockup.Model", "name": "lockupModel", "type": "uint8" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getRecipient",
    "outputs": [{ "internalType": "address", "name": "recipient", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getRefundedAmount",
    "outputs": [{ "internalType": "uint128", "name": "refundedAmount", "type": "uint128" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getSegments",
    "outputs": [
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "UD2x18", "name": "exponent", "type": "uint64" },
          { "internalType": "uint40", "name": "timestamp", "type": "uint40" }
        ],
        "internalType": "struct LockupDynamic.Segment[]",
        "name": "segments",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getSender",
    "outputs": [{ "internalType": "address", "name": "sender", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getStartTime",
    "outputs": [{ "internalType": "uint40", "name": "startTime", "type": "uint40" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getTranches",
    "outputs": [
      {
        "components": [
          { "internalType": "uint128", "name": "amount", "type": "uint128" },
          { "internalType": "uint40", "name": "timestamp", "type": "uint40" }
        ],
        "internalType": "struct LockupTranched.Tranche[]",
        "name": "tranches",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getUnderlyingToken",
    "outputs": [{ "internalType": "contract IERC20", "name": "token", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getUnlockAmounts",
    "outputs": [
      {
        "components": [
          { "internalType": "uint128", "name": "start", "type": "uint128" },
          { "internalType": "uint128", "name": "cliff", "type": "uint128" }
        ],
        "internalType": "struct LockupLinear.UnlockAmounts",
        "name": "unlockAmounts",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "getWithdrawnAmount",
    "outputs": [{ "internalType": "uint128", "name": "withdrawnAmount", "type": "uint128" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "address", "name": "recipient", "type": "address" }],
    "name": "isAllowedToHook",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "owner", "type": "address" },
      { "internalType": "address", "name": "operator", "type": "address" }
    ],
    "name": "isApprovedForAll",
    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "isCancelable",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "isCold",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "isDepleted",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "isStream",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "isTransferable",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "isWarm",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "nativeToken",
    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "nextStreamId",
    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "nftDescriptor",
    "outputs": [{ "internalType": "contract ILockupNFTDescriptor", "name": "", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }],
    "name": "ownerOf",
    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "contract IERC20", "name": "token", "type": "address" },
      { "internalType": "address", "name": "to", "type": "address" }
    ],
    "name": "recover",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "refundableAmountOf",
    "outputs": [{ "internalType": "uint128", "name": "refundableAmount", "type": "uint128" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "renounce",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "from", "type": "address" },
      { "internalType": "address", "name": "to", "type": "address" },
      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "from", "type": "address" },
      { "internalType": "address", "name": "to", "type": "address" },
      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },
      { "internalType": "bytes", "name": "data", "type": "bytes" }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "operator", "type": "address" },
      { "internalType": "bool", "name": "approved", "type": "bool" }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract ISablierComptroller",
        "name": "newComptroller",
        "type": "address"
      }
    ],
    "name": "setComptroller",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract ILockupNFTDescriptor",
        "name": "newNFTDescriptor",
        "type": "address"
      }
    ],
    "name": "setNFTDescriptor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "address", "name": "newNativeToken", "type": "address" }],
    "name": "setNativeToken",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "statusOf",
    "outputs": [{ "internalType": "enum Lockup.Status", "name": "status", "type": "uint8" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "streamedAmountOf",
    "outputs": [{ "internalType": "uint128", "name": "streamedAmount", "type": "uint128" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }],
    "name": "supportsInterface",
    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "tokenURI",
    "outputs": [{ "internalType": "string", "name": "uri", "type": "string" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "transferFeesToComptroller",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "address", "name": "from", "type": "address" },
      { "internalType": "address", "name": "to", "type": "address" },
      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "wasCanceled",
    "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "internalType": "address", "name": "to", "type": "address" },
      { "internalType": "uint128", "name": "amount", "type": "uint128" }
    ],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "internalType": "address", "name": "to", "type": "address" }
    ],
    "name": "withdrawMax",
    "outputs": [{ "internalType": "uint128", "name": "withdrawnAmount", "type": "uint128" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "uint256", "name": "streamId", "type": "uint256" },
      { "internalType": "address", "name": "newRecipient", "type": "address" }
    ],
    "name": "withdrawMaxAndTransfer",
    "outputs": [{ "internalType": "uint128", "name": "withdrawnAmount", "type": "uint128" }],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      { "internalType": "uint256[]", "name": "streamIds", "type": "uint256[]" },
      { "internalType": "uint128[]", "name": "amounts", "type": "uint128[]" }
    ],
    "name": "withdrawMultiple",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [{ "internalType": "uint256", "name": "streamId", "type": "uint256" }],
    "name": "withdrawableAmountOf",
    "outputs": [{ "internalType": "uint128", "name": "withdrawableAmount", "type": "uint128" }],
    "stateMutability": "view",
    "type": "function"
  }
]
